我有一个.txt文件,如下所示:
Value1 Value2 Value3 Value4
0.558 0.834 0.521 0.125
0.543 0.800 0.231 0.222
1.85E-01 8.0E-01 1.3E-01 0.521
1.23E-01 0.777 0.232 0.552
....... ..... ..... .....
文件继续使用未知行数。我想使用fscanf
,排除标题来阅读所有值。到目前为止,我已尝试过以下内容:
fscanf(fid, '%9f %9f %9f %9f %9f %9f %9f %9f %9f %9f')
fscanf(fid, '%9f %9f %9f %9f %9f %9f %9f %9f %9f %9f',[Inf 4])
所有结果都是:
ans =
[]
我对这个命令的使用相对较新,但感觉这应该是给我我想要的结果。有什么想法吗?
答案 0 :(得分:1)
假设您的值以单个空格分隔,您可以使用dlmread来读取此类文件。
>> dlmread('data.txt',' ', 2, 1)
ans =
0.8000 0.2310 0.2220
0.8000 0.1300 0.5210
0.7770 0.2320 0.5520
第二个参数是分隔符,这里我使用了一个空格。它可以是制表符(\t
)或其他内容。最后一个参数指定要从哪个行和列开始。在这里,我们通过设置R=2
跳过标题。
答案 1 :(得分:1)
我得到了它。这些命令可以解决问题。需要记住的重要一点是fscanf
(有点令人困惑)按行读取值,但是按列填充sizeA指定的数组(请参阅doc)。还需要将打开文件的当前地址移动到第二行(因为第一行包含标题)。我确信有更优雅的方法可以做到这一点,但我使用了fgetl
。如果您知道更好的方法(即实际上不输出下一行的那个),请发表评论。
>> fid = fopen('textfile.txt')
fid =
5
>> fgetl(fid)
ans =
Value1 Value2 Value3 Value4
>> Array = fscanf(fid, '%f', [4, Inf])
Array =
0.5580 0.5430 0.1850 0.1230
0.8340 0.8000 0.8000 0.7770
0.5210 0.2310 0.1300 0.2320
0.1250 0.2220 0.5210 0.5520
>> ArrayT = Array'
ArrayT =
0.5580 0.8340 0.5210 0.1250
0.5430 0.8000 0.2310 0.2220
0.1850 0.8000 0.1300 0.5210
0.1230 0.7770 0.2320 0.5520