0

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

vertical_line_flag;0
vertical_line_ratio;
0laser_wavelength;
0laser_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;

数字开始的点,如 (lumen) #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]

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

4

2 回答 2

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);
于 2014-04-28T14:11:47.487 回答
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
       ...

希望它有所帮助,问候。

于 2014-04-28T14:04:54.847 回答