我有一个文本文件,它是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这四个值。 我缺少一个更简单的选项吗?
答案 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
];