Matlab - 读取文本文件并从特定行提取数据

时间:2015-05-13 12:51:29

标签: matlab parsing cell-array textscan

我有一个文本文件,它是diff程序命令行的输出。 我现在用

读取文件
m

我现在有了我需要提取数据的行。 此位置的文件格式类似于

fileID     = fopen('runInfo.out','r');
file_dump  = textscan(fileID, '%s', 'Delimiter', '\n'); 
% Find postion of Min Cp to mark field on interest
Row        = find(~cellfun('isempty',strfind(file_dump{1}, 'Minimum Viscous  Cp')));
fclose(fileID);

由于我已经从.OPERv c> u/Uinf = 1.0050 v/Uinf = -0.0029 q/Uinf = 1.0050 Cp = -0.0100 .OPERv c> u/Uinf = 1.0088 v/Uinf = -0.0075 q/Uinf = 1.0088 Cp = -0.0177 .OPERv c> u/Uinf = 1.0156 v/Uinf = -0.0281 q/Uinf = 1.0160 Cp = -0.0323 的cellArray中获取了此数据, 我能想到的是(相当不健壮)

textscan

然后以某种方式从这些返回的单元格中提取数字? 最后,我需要u / Uinf,v / Uinf,q / Uinf和Cp这四个值。 我缺少一个更简单的选项吗?

1 个答案:

答案 0 :(得分:0)

如果要从中提取数据的文本文件是您在sedond框中发布的文件,则可以使用AWK脚本。

followng AWK脚本读取文本文件,并生成一个MatLab .m文件作为输出,该文件包含从文本文件中提取的值作为数组。

AWK脚本

BEGIN {
u_cnt=1;
v_cnt=1;
c_cnt=1;
q_cnt=1;
}
{
if($1 == "u/Uinf")
   {
      u_Uinf[u_cnt]=$3
      u_cnt++
   }  
if($4 == "v/Uinf")
   {
      v_Uinf[v_cnt]=$6
      v_cnt++
   }
if($4 == "Cp")
   {
      cp[c_cnt]=$6
      c_cnt++
   }
if($1 == "q/Uinf")
   {
      q_Uinf[q_cnt]=$3
      q_cnt++
   }
}
END {
print "u_Uinf_data=[" > "txt_file_data.m"
for(i=1;i<u_cnt;i++)
   print u_Uinf[i] > "txt_file_data.m"
print "];" > "txt_file_data.m"

print "v_Uinf_data=[" > "txt_file_data.m"
for(i=1;i<v_cnt;i++)
   print v_Uinf[i] > "txt_file_data.m"
print "];" > "txt_file_data.m"

print "q_Uinf_data=[" > "txt_file_data.m"
for(i=1;i<q_cnt;i++)
   print q_Uinf[i] > "txt_file_data.m"
print "];" > "txt_file_data.m"


print "cp_data=[" > "txt_file_data.m"
for(i=1;i<c_cnt;i++)
   print cp[i] > "txt_file_data.m"
print "];" > "txt_file_data.m"
}

输出.m档案

u_Uinf_data=[
1.0050
1.0088
1.0156
];
v_Uinf_data=[
-0.0029
-0.0075
-0.0281
];
q_Uinf_data=[
1.0050
1.0088
1.0160
];
cp_data=[
-0.0100
-0.0177
-0.0323
];