我正在开发一个涉及上传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]
如何解决此问题的任何建议将不胜感激。
答案 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
...
希望它有所帮助,问候。