我有一个如下文字文件:
TestData
6.84 11.31 17.51 22.62 26.91 31.98 36.47 35.85 28.47 20.57 10.50 6.37 test1
0.24 2.62 4.94 7.17 10.39 15.37 18.73 18.29 12.26 6.46 1.15 -0.33 test2
68.47 95.04156.07218.39304.31320.22311.69269.22203.01135.60 68.18 55.09 test3
68.47 95.04156.07218.39304.31320.22311.69269.22203.01135.60 68.18 55.09 test4
...
如您所见,前两行是要忽略的注释。在以下几行中,每行末尾都有注释。每个数字都是%6f的形式。此外,中间还有空行。
我想将所有数字读入矩阵以制作情节。我试图使用文本扫描,但有问题忽略最后一列,空白行和读入的数字(例如,行中的一些数字:test4)。
以下是我现在的代码:
data=dir('*.txt');
formatspecific='%6f%6f%6f%6f%6f%6f%6f%6f%6f%6f%6f%6f';
for i=1:length(data);
TestData1=data(i).name;
tempData=textscan(TestData1,formatspecific,'HeaderLines',2);
end
任何人都可以帮助制作示例代码来改进文本扫描部分吗?
答案 0 :(得分:1)
要使用textscan
来阅读文件,您必须"打开"在致电textscan
和"关闭"之前之后;你应该使用
fopen
打开输入文件fclose
关闭输入文件 textscan
返回cellarray
,其中包含从输入文件中读取的内容;因为您正在阅读多个文件,所以您应该更改管理由textscan
返回的cellarray的方式,实际上,就像现在在您的代码中一样,数据在每次迭代时都会被覆盖。
一种可能性是将数据存储在struct
数组中,例如,2 fields
:输入文件的名称和数据。
另一种可能性是生成struct
每个字段包含从输入文件读取的数据;您可以自动生成文件名。
另一种可能性是将它们存储到矩阵中。
此后,您可以找到已实施这三种替代方案的脚本。
代码已更新(收到评论后)
为了能够正确地将95.04156.07
等数据作为95.04
156.07
读取,格式说明符应从%6f
修改为%6.2f
< / p>
% Get the list of input data
data=dir('input_file*.txt');
% Define the number of data column
n_data_col=12;
% Define the number of heared lines
n_header=2;
% Build the format specifier string
% OLD format specifier
formatspecific=[repmat('%6f',1,n_data_col) '%s']
% NEW format specifier
formatspecific=[repmat('%6.2f',1,n_data_col) '%s']
% Initialize the m_data matrix (if you know in advance the numer of row of
% each input file yoiu can define since the beginning the size of the
% matrix)
m_data=[];
% Loop for input file reading
for i=1:length(data)
% Get the i-th file name
file_name=data(i).name
% Open the i-th input file
fp=fopen(file_name,'rt')
% Read the i-th input file
C=textscan(fp,formatspecific,'headerlines',n_header)
% Close the input file
fclose(fp)
% Assign the read data to the "the_data" array struct
the_data(i).f_name=file_name
the_data(i).data=[C{1:end-1}]
% Assign the data to a struct whos fileds are named after the inout file
data_struct.(file_name(1:end-4))=[C{1:end-1}]
% Assign the data to the matric "m_data
m_data=[m_data;[C{1:end-1}]]
end
输入文件
TestData
6.84 11.31 17.51 22.62 26.91 31.98 36.47 35.85 28.47 20.57 10.50 6.37 test1
0.24 2.62 4.94 7.17 10.39 15.37 18.73 18.29 12.26 6.46 1.15 -0.33 test2
68.47 95.04156.07218.39304.31320.22311.69269.22203.01135.60 68.18 55.09 test3
68.47 95.04156.07218.39304.31320.22311.69269.22203.01135.60 68.18 55.09 test4
<强>输出强>
m_data =
Columns 1 through 7
6.8400 11.3100 17.5100 22.6200 26.9100 31.9800 36.4700
0.2400 2.6200 4.9400 7.1700 10.3900 15.3700 18.7300
68.4700 95.0400 156.0700 218.3900 304.3100 320.2200 311.6900
68.4700 95.0400 156.0700 218.3900 304.3100 320.2200 311.6900
Columns 8 through 12
35.8500 28.4700 20.5700 10.5000 6.3700
18.2900 12.2600 6.4600 1.1500 -0.3300
269.2200 203.0100 135.6000 68.1800 55.0900
269.2200 203.0100 135.6000 68.1800 55.0900
希望这有帮助。