我很感激你的帮助!提前致谢! 我有一个巨大的文本文件,格式如下:
*********************************
timestep 455
No_Specs 3
H2 49
H2O2 1
O2 49
*********************************
timestep 460
No_Specs 3
H2O 49
H2O2 1
O2 49
*********************************
timestep 465
No_Specs 2
H2 50
O2 50
*********************************
正如你所看到的那样,文本文件中包含很多循环,每个循环包含4-10行(每个循环的行数不是常数)。我想要的只是报告在时间步前写的数字到矩阵的第一列。另外,我需要为任何循环找到'H2O'[为了避免混淆额外的空间]并在该矩阵的第二列中报告它前面的数字!显然,如果有的话循环中的任何'H2O'都不是该行为零的相关数字!
以下是代码:
fid=fopen('fic.txt');
l=fgetl(fid);
k=1;
while ischar(l)
r{k}=l;
k=k+1;
l=fgetl(fid);
end
fclose(fid);
idx=find(~cellfun(@isempty,regexp(r,'(?=timestep).+')));
a=regexp(r(idx),'\d+','match');
b=str2double([a{:}]);
ii=diff([idx numel(r)+1])-1;
for k=1:numel(b);
s=r(idx(k)+1:ii(k));
jj=find(~cellfun(@isempty,regexp(s,'(?=H2O ).+')));
c=regexp(s(jj),'\d+','match');
if isempty(c)
f(k)=0;
else
f(k)=str2double(c{1});
end
end
M=[b' f']
代码问题是,第二列的元素都是零!!!我希望你能帮助我!我感谢你的帮助!最好
答案 0 :(得分:0)
在这里,有一些索引错误
%%
fid=fopen('fic.txt');
l=fgetl(fid);
k=1;
while ischar(l)
r{k}=l;
k=k+1;
l=fgetl(fid);
end
fclose(fid);
idx=find(~cellfun(@isempty,regexp(r,'(?=timestep).+')));
a=regexp(r(idx),'\d+','match');
b=str2double([a{:}]);
ii=diff([idx numel(r)+1])-1;
for k=1:numel(b);
s=r(idx(k)+1:idx(k)+ii(k));
jj=find(~cellfun(@isempty,regexp(s,'(?=H2O ).+')));
c=regexp(s(jj),'\d+','match');
if isempty(c)
f(k)=0;
else
f(k)=str2double(c{1}(2));
end
end
M=[b' f']