我正在尝试将大量文件导入Matlab进行处理。典型的文件如下所示:
mass intensity
350.85777 238
350.89252 3094
350.98688 2762
351.87899 468
352.17712 569
352.28449 426
Some text and numbers here, describing the experimental setup, eg
Scan 3763 @ 81.95, contains 1000 points:
两列中的数字由8个空格分隔。但是,有时实验会出错,机器会生成如下数据文件:
mass intensity
Some text and numbers here, describing the experimental setup, eg
Scan 3763 @ 81.95, contains 1000 points:
我发现使用带有单个标题行的空格分隔文件,即
importdata(path_to_file,' ', 1);
最适合普通文件。但是,它完全失败了所有异常文件。解决这个问题的最简单方法是什么?我应该坚持使用importdata(已经尝试了所有可能的设置,它只是不起作用)或者我应该尝试编写自己的解析器?理想情况下,我想在普通文件的Nx2矩阵中获取这些值,在异常文件中使用[0 0]。
感谢。
答案 0 :(得分:4)
我认为你不需要创建自己的解析器,这也不是那么异常。使用textscan是您最好的选择。
fid = fopen('input.txt', 'rt');
data = textscan(fid, '%f %u', 'Headerlines', 1);
fclose(fid);
mass = data{1};
intensity = data{2};
收率:
mass =
350.8578
350.8925
350.9869
351.8790
352.1771
352.2845
intensity =
238
3094
2762
468
569
426
第一个文件和:
mass =
Empty matrix: 0-by-1
intensity =
Empty matrix: 0-by-1
对于空的。
默认情况下,文本扫描将空格作为分隔符读取,它只读取您告诉它的内容,直到它不再这样做为止;因此它会忽略文件中的最后一行。如果您想要获取其他字段,也可以在此之后运行第二个文本扫描:
fid = fopen('input.txt', 'rt');
data = textscan(fid, '%f %u', 'Headerlines', 1);
mass = data{1};
intensity = data{2};
data = textscan(fid, '%*s %u %*c %f %*c %*s %u %*s', 'Headerlines', 1);
scan = data{1};
level = data{2};
points = data{3};
fclose(fid);
随着您的质量和强度数据给出:
scan =
3763
level =
81.9500
points =
1000
答案 1 :(得分:1)
你的意思是'异常文件完全失败'?
您可以使用例如
检查导入数据是否找到任何数据>> imported = importdata(path_to_file,' ', 1);
>> isfield(imported, 'data')