Как записать формат в fscanf в Matlab, чтобы он мог быть прочитан правильно? - PullRequest
0 голосов
/ 26 марта 2012
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]

Преобразует символцелое число, после того, как плавать, но не могли бы вы сказать мне, как этого избежать?Если это возможно.

Ответы [ 2 ]

3 голосов
/ 26 марта 2012

FSCANF возвращает только числовые (или символьные) массивы. Я рекомендую использовать TEXTSCAN для смешанных данных.

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

A будет массивом ячеек.

0 голосов
/ 26 марта 2012

Используйте 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...