从文件中读取Matlab特定行并将其转换为数值

时间:2014-06-24 00:20:11

标签: matlab file lines numerical

我在MATLAB中创建了一个优化ANSYS研究的代码,所以我想查看ANSYS输出文件,看看结果是否可以接受。

此代码具有ANSYS用于创建模型的参数。这些参数在每次迭代时都会发生变化,因此在每次迭代时都会创建一个不同的输出文件。

让我们更具体一点。下面是输出文件的示例:

  • 第1行blabla
  • 第2行blabla

  • 。    。    

  • 10000行最大值
  • 第10001行第1 2.31 4.56 5.69 8.64 0.25 9.70
  • 第35000行最大值
  • 35001行值 2.25
  • 行70000总值3 2503.4

我想要做的就是看看前两个粗体值是否低于问题的极限(即9.70 <15和2.25 <7)。 如果是,则将第三个值以粗体显示在矩阵中。 如果不是,请转到下一次迭代。

我对编程很新,Matlab指令有点令人困惑。

欢迎任何想法!

提前致谢!

**编辑:**到目前为止,这是我的整个代码:

    X1=linspace(26,60,3)';
    X2=linspace(104,70,3)';
    R=linspace(3,10,3)';
    vec={X1',X2',R'};
    combs=combvec(vec{:})';

    seqv=zeros(i,1);
    tic

    for i=1:length(combs);
        fid=fopen('C:\Users\vaioss\Desktop\ergasia ymk\test\aa.txt','w+');
        fprintf(fid,'*SET,X1,%7.4f \r\n',combs(i,1));
        fprintf(fid,'*SET,X2,%7.4f \r\n',combs(i,2));
        fprintf(fid,'*SET,R,%7.4f \r\n',combs(i,3));
        fclose(fid);

        fid=fopen('C:\Users\...','r+');
        fclose(fid);

        dos('"C:\Program Files\ANSYS Inc\v150\ANSYS\bin\winx64\ansys150.exe"  -p ...');     

        fid=fopen('C:\Users\...','r');

        for j=1:10152; 
            tline=fgetl(fid); 
        end

        match = textscan(tline, '%s %f %f %f %f %f', '\n')';
        seqv(i) = cell2mat(match(6,1));

        if seqv(i)>67.2887;
            fclose(fid);
            continue
        end


    end
    fclose all;
    toc

1 个答案:

答案 0 :(得分:0)

如果在您想要的信息之前有不同数量的不同格式的行,可能最简单的方法是沿着这些行

1)使用fgetl一次获取一行(显然,如果您知道可以安全地跳过前3000行或其他任何行,请执行此操作)

2)使用strfind检查您是否已点击values1行。如果是,请解析该行并检查该值是否在限制范围内。

如果需要,请重复values2values3,或者转到下一个文件并重复。如果列表中的文件没有包含所有这些字符串的可能性,那么您还需要一些方法来处理在找到它们之前点击eof的情况。