Что не так с этим [чтение ввода из текстового файла в Matlab]? - PullRequest
1 голос
/ 22 сентября 2009

У меня есть текстовый файл (c: \ input.txt), который имеет:

2.0 4.0 8.0 16.0 32.0 64.0 128.0 256.0 512.0 1024.0 2048.0 4096.0 8192.0

В Matlab я хочу прочитать это как:

data = [2.0 4.0 8.0 16.0 32.0 64.0 128.0 256.0 512.0 1024.0 2048.0 4096.0 8192.0]

Я попробовал этот код:

fid=fopen('c:\\input.txt','rb');
data = fread(fid, inf, 'float');
data

но я получаю некоторые значения мусора:

data =

  1.0e-004 *

    0.0000
    0.0015
    0.0000
    0.0000
    0.0000
    0.0000
    0.0000
    0.0001
    0.0239
    0.0000
    0.0000
    0.0000
    0.0000
    0.0066
    0.0000
    0.0000
    0.0000
    0.0000
    0.0000
    0.0000
    0.0000
    0.0016
    0.0000
    0.0000
    0.0276
    0.0000
    0.3819
    0.0000
    0.0000

Где ошибка?

Ответы [ 2 ]

8 голосов
/ 22 сентября 2009

fread только для чтения бинарных файлов!
Эквивалент для текстовых файлов: fscanf , используется следующим образом:

fid = fopen('c:\\input.txt','rt');
data = fscanf(fid, '%f', inf)';
fclose(fid);

Или в вашем случае просто используйте load :

data = load('c:\\input.txt', '-ascii');


В MATLAB есть много других способов чтения текстовых данных из файлов:

2 голосов
/ 22 сентября 2009

Ваш файл является текстовым файлом, поэтому вы должны открыть его для чтения текста:

fid=fopen('c:\\input.txt','rt');

Затем, для чтения, я считаю, что TEXTSCAN более мощный, чем FREAD / FSCANF (различия между ними суммированы здесь

data = textscan(f, '%f')

возвращает массив ячеек. Вы можете получить на содержание с

>> data{1}

ans =

       2
       4
       8
      16
      32
      64
     128
     256
     512
    1024
    2048
    4096
    8192

TEXTREAD проще в использовании, чем TEXTSCAN, но, согласно документации, сейчас устарел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...