Matlab中自动读取包含特殊字符的数据文件
Automatically reading data files containing special characters in Matlab
我想在 Matlab 中导入一个由外部软件自动生成的数据文件。
此数据文件偶尔会在其第三列的随机位置包含特殊字符。因此,我不能简单地使用 dlmread。
我正在研究如何在矩阵中插入数据时自动在 Matlab 中导入此文件。另外,识别特殊字符并用 NaN 替换它们是必要的。
这里有一些示例数据,可以让您更好地了解问题:
NACA0012
Alfa = 25.00000 Re = 0.000 Xflap,Yflap = 0.000000 0.000000
x y Cp
1.00000 0.00126 0.53803
0.08399 0.04389 -7.27148
0.07278 0.04150 -8.16799
0.03346 0.02983-15.69087
0.02840 0.02771-18.03665
0.02399 0.02566-20.81862
0.00360 0.01041-95.28658
0.00238 0.00851*********
0.00141 0.00659*********
0.00070 0.00467*********
0.00025 0.00277*********
0.00003 0.00091*********
0.00003 -0.00091*********
0.00025 -0.00277-93.41611
0.00070 -0.00467-72.18787
0.00141 -0.00659-51.54605
0.00238 -0.00851-37.04853
注意第三列如何'stuck'到第二列
任何帮助将不胜感激,因为我有点卡住了,不知道如何自动完成。也许你们可以给我一段代码来做。
提前致谢!
巴拉吉
使用 textscan
时牢记 3 个想法:
- 需要跳过第一行;
*
字符串将被视为 NaN
s;
- 如果出错请关闭文件。
因此代码(假设示例数据在文件 'u.txt'
中):
try
f = fopen('u.txt');
m = textscan( f, ...
'%f%f%f', Inf, ...
'HeaderLines', 6, ...
'TreatAsEmpty', '*********', ...
'CollectOutput', 1 ...
);
fclose(f);
catch ME
fclose('all');
end;
我想在 Matlab 中导入一个由外部软件自动生成的数据文件。
此数据文件偶尔会在其第三列的随机位置包含特殊字符。因此,我不能简单地使用 dlmread。
我正在研究如何在矩阵中插入数据时自动在 Matlab 中导入此文件。另外,识别特殊字符并用 NaN 替换它们是必要的。
这里有一些示例数据,可以让您更好地了解问题:
NACA0012
Alfa = 25.00000 Re = 0.000 Xflap,Yflap = 0.000000 0.000000
x y Cp
1.00000 0.00126 0.53803
0.08399 0.04389 -7.27148
0.07278 0.04150 -8.16799
0.03346 0.02983-15.69087
0.02840 0.02771-18.03665
0.02399 0.02566-20.81862
0.00360 0.01041-95.28658
0.00238 0.00851*********
0.00141 0.00659*********
0.00070 0.00467*********
0.00025 0.00277*********
0.00003 0.00091*********
0.00003 -0.00091*********
0.00025 -0.00277-93.41611
0.00070 -0.00467-72.18787
0.00141 -0.00659-51.54605
0.00238 -0.00851-37.04853
注意第三列如何'stuck'到第二列
任何帮助将不胜感激,因为我有点卡住了,不知道如何自动完成。也许你们可以给我一段代码来做。
提前致谢!
巴拉吉
使用 textscan
时牢记 3 个想法:
- 需要跳过第一行;
*
字符串将被视为NaN
s;- 如果出错请关闭文件。
因此代码(假设示例数据在文件 'u.txt'
中):
try
f = fopen('u.txt');
m = textscan( f, ...
'%f%f%f', Inf, ...
'HeaderLines', 6, ...
'TreatAsEmpty', '*********', ...
'CollectOutput', 1 ...
);
fclose(f);
catch ME
fclose('all');
end;