将文本文件的特定信息导入矩阵

时间:2015-06-11 05:15:10

标签: matlab text matrix

我很感激你的帮助!提前致谢! 我有一个巨大的文本文件,格式如下:

*********************************
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']

代码问题是,第二列的元素都是零!!!我希望你能帮助我!我感谢你的帮助!最好

1 个答案:

答案 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']