manipulating text files

I have a .txt file structured as below:
title
name 00xxxx yyyy
name 00xxxx yyyy
in each line the first n characters describe a name, followed by 67-n spaces, then a 6 digit code starting with 2 zeros and after 9 spaces a 4 digit codes. What i need to do is copy the xxxx numbers to the place of the yyyy numbers in all lines of the file and save it back to .txt file by maintaining the exact structure in the output file. How could i handle something like that in matlab ?
Thanks in advance

 Accepted Answer

TAB
TAB on 19 Sep 2011
fi=fopen('YourFile.txt','r');
fo=fopen('outfile.txt','w');
txtcell=textscan(fi,'%s','delimiter','\n');
Str1Idx=1;
Str2Idx=68;
Str3Idx=82;
StrLen=86;
for i=1:length(txtcell{1})
if(length(txtcell{1}{i})==StrLen)
txtcell{1}{i}((Str3Idx):(Str3Idx+4))=txtcell{1}{i}((Str2Idx+2):(Str2Idx+6));
end
fprintf(fo,strcat(txtcell{1}{i},'\n'));
end
fclose(fi);
fclose(fo);

4 Comments

Jan
Jan on 19 Sep 2011
You can get txtcell{1} as separate variable. This is much faster and nicer then accessing the data as nested cell.
it works, but i still have a problem concerning the space delimiters after column no 86. My original document has 159 columns in each line and so i want the output file to be exact the same. By removing strcat from your code i am able to print the 159 columns with whitespaces but i can't manage change line to the output.
TAB
TAB on 19 Sep 2011
Try
fprintf(fo,txtcell{1}{i});
fprintf(fo,'\n');
Thanks it works great although it skips a line. Using fgetl does not skip anything:
inputFile = 'input.txt';
outputFile = 'output.txt';
fi=fopen(inputFile,'r');
fo=fopen(outputFile,'w');
jline=0;
while 1
jline = jline+1;
pretxtcell{jline,:} = fgetl(fi);
if ~ischar(pretxtcell{jline}), break, end
if pretxtcell{jline}==-1, break, end
txtcell{jline,:}=pretxtcell{jline};
if jline>=1
txtcell{jline,1}(1,81:86)=pretxtcell{jline,1}(1,67:72);
end
end
fclose(fi);
for i = 1:size(txtcell,1)
fprintf(fo,txtcell{i,1});
fprintf(fo,'\r\n');
end
fclose(fo);
Anyway, thanks a lot

Sign in to comment.

More Answers (0)

Products

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!