如何在matlab中将格式写入fscanf才能正确读取?

时间:2012-03-26 16:21:05

标签: matlab file-io

1               IE             4.3310         11089
2               NI             2.8207         7222
3               RZ             1.7162         4394
4               WI             1.5857         4060
5               NA             1.5510         3971
6               PO             1.5080         3861
7               ZE             1.4354         3675
8               CH             1.4150         3623
9               CZ             1.3936         3568

我有类似的东西。我写了这个fscanf的格式:

fscanf(file_id, "%d %s %f %d")

例如 - 第一行 - 我希望:

[1, 'IE', 4.3310, 110890]

我明白了:

[1.00, 49.0, 45.0, 4.3310, 110890]

它将char转换为整数,之后浮动,但是你能告诉我如何避免这种情况吗? 如果可能的话。

2 个答案:

答案 0 :(得分:3)

FSCANF仅返回数字(或char)数组。我建议将TEXTSCAN用于混合数据。

fid = fopen(filename, 'rt');
A = textscan(fid, '%d %s %f %d', 'delimiter','\t');
fclose(fid);

A将是一个单元格数组。

答案 1 :(得分:0)

请改用textscan。 E.G:

fid = fopen('testfile.dat');
result = textscan(fid,'%d %s %f %d');
fclose(fid)

现在result是具有相应数据类型的列的单元格数组。例如:

>> result
result = 
    [9x1 int32]    {9x1 cell}    [9x1 double]    [9x1 int32]
>> result{1}
ans =
           1
           2
           3
           4
           5
           6
           7
           8
           9
>> result{2}
ans = 
    'IE'
    'NI'
    'RZ'
    'WI'
    'NA'
    'PO'
    'ZE'
    'CH'
    'CZ'