manipulating text files

15 次查看(过去 30 天)
conrad Landis
conrad Landis 2011-9-19
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

采纳的回答

TAB
TAB 2011-9-19
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 个评论
TAB
TAB 2011-9-19
Try
fprintf(fo,txtcell{1}{i});
fprintf(fo,'\n');
conrad Landis
conrad Landis 2011-9-19
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

请先登录,再进行评论。

更多回答(0 个)

标签

产品

Community Treasure Hunt

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

Start Hunting!

Translated by