如何使用Matlab跳过文本文件中的行?

时间:2014-04-28 11:49:13

标签: matlab text-files textscan

我正在开发一个涉及上传txt文件的GUI程序。该文件的前80行包含我不需要的信息,它是数字和文本数据的混合。例如,这里有几行我不想使用的数据;

vertical_line_flag; 0
vertical_line_ratio; 0
laser_wavelength; 0
laser_powerlevel; 0
overlay_js; 0
相对强度校正标志; 0
像素;波长;波数;拉曼位移;黑暗;参考;原始数据#1;暗消减#1;%TR#1;吸光度#1;辐照度(流明)#1;
0; 165.98; 60247.73; -60247.73; 0.0000; 65535.0000; 1125.0000; 31.0000; 0.0000; 0.0000; 0.0000; 1; 166.38; 60103.59; -60103.59; 0.0000; 65535.0000; 549.0000; -545.0000; 0.0000; 0.0000; 0.0000; 2; 166.78; 59960.14; -59960.14; 0.0000; 65535.0000; 0.0000; -1094.0000; 0.0000; 0.0000; 0.0000; 3; 167.18; 59817.38; -59817.38; 0.0000; 65535.0000; 998.0000; -96.0000; 0.0000; 0.0000; 0.0000; 4; 167.57; 59675.31; -59675.31; 0.0000; 65535.0000; 1046.0000; -48.0000; 0.0000; 0.0000; 0.0000; 5; 167.97; 59533.90; -59533.90; 0.0000; 65535.0000; 1020.0000; -74.0000; 0.0000; 0.0000; 0.0000; 6; 168.37; 59393.17; -59393.17; 0.0000; 65535.0000; 1003.0000; -91.0000; 0.0000; 0.0000; 0.0000; 7; 168.77; 59253.11; -59253.11; 0.0000; 65535.0000; 1051.0000; -43.0000; 0.0000; 0.0000; 0.0000; 8; 169.17; 59113.71; -59113.71; 0.0000; 65535.0000; 1024.0000; -70.0000; 0.0000; 0.0000; 0.0000; 9; 169.56; 58974.97; -58974.97; 0.0000; 65535.0000; 1045.0000; -49.0000; 0.0000; 0.0000; 0.0000; 10; 169.96; 58836.88; -58836.88; 0.0000; 65535.0000; 1091.0000; -3.0000; 0.0000; 0.0000; 0.0000; 11; 170.36; 58699.44; -58699.44; 0.0000; 65535.0000; 1064.0000; -30.0000; 0.0000; 0.0000; 0.0000; 12; 170.76; 58562.65; -58562.65; 0.0000; 65535.0000; 1019.0000; -75.0000; 0.0000; 0.0000; 0.0000;

数字开始的点,如(流明)#1之后的行;是我想在我的程序中使用的数据。

我尝试使用此代码跳过文件的前80行

[FileName,PathName]= uigetfile('*.txt*','Files to Study');

file =fullfile(PathName,FileName);

 fid = fopen(file);
 A = textscan(fid,'%f' ,'HeaderLines',80);

但这导致A = [0x1 double]

如何解决此问题的任何建议将不胜感激。

2 个答案:

答案 0 :(得分:2)

目前使用textscan的问题是;不是默认分隔符。所以这将有效:

fid = fopen(file);
A = textscan(fid,'%f' ,'HeaderLines',80,'Delimiter',';');

但如果文件的其余部分是100%数字,则可以使用dlmread并设置开始读取的行和列值(注意:与MATLAB中的其他所有内容不同,这些值从零开始)。

对于您的测试数据:

A = dlmread('test.txt',';',7,0);

对于包含80行标题的实际数据:

A = dlmread(filename,';',80,0);

答案 1 :(得分:1)

试试这段代码:

A = [];
tline = fgets(fid);
while ischar(tline)
    parts = textscan(tline, '%d;');
    if numel(parts{1}) > 0
        A = [ A ; parts{:}' ];
    end
    tline = fgets(fid);

end

fclose(fid);

基本上,它在文本文件中查找具有数值的行。对于这些行中的每一行,扫描值并将它们作为矩阵A中的行附加。

我的文字输出是:

A =

       0         166       60248      -60248           0       65535        1125          31           0           0           0
       1         166       60104      -60104           0       65535         549        -545           0           0           0
       2         167       59960      -59960           0       65535           0       -1094           0           0           0
       3         167       59817      -59817           0       65535         998         -96           0           0           0
       4         168       59675      -59675           0       65535        1046         -48           0           0           0
       5         168       59534      -59534           0       65535        1020         -74           0           0           0
       ...

希望它有所帮助,问候。