Возвращение пустых массивов / переменных при загрузке .txt файла в Matlab - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь загрузить файл .txt с данными в Matlab для использования в некоторых вычислениях.Однако, когда я запускаю код, переменные / массивы возвращаются пустыми или пустыми.Ниже у меня есть код, который я использую.

%% importing the data
% Open file in the memory
fileID = fopen('rainfall.txt');
% Read the txt file with formats: Integer, Integer, Float

% Treat multiple delimiters, which is "space" in here, as one. Put the data
% in a variable called chunk.
chunk = textscan(fileID,'%d %d %f','Delimiter',' ',...
'MultipleDelimsAsOne',1);
% Close file from the memory.
fclose(fileID);
% date
dt = chunk{:,1};
% hour
hr = chunk{:,2};
% precip
r = chunk{:,3};
% remove extra variables from Matlab workspace
clear fileID ans

На вкладке Рабочая область в Matlab отображается chunk как пустой 1x3 cell.Это приводит к тому, что dt, hr и r также не имеют никаких значений и отображаются как имеющие значение [].Поэтому я думаю, что с загрузкой данных в Matlab что-то не так.

Кроме того, вот небольшая часть данных, с которыми я работаю.Именно так и написано в файле .txt.

STATION           DATE           HPCP     
----------------- -------------- -------- 
      COOP:132367 20040116 22:00 0.01     
      COOP:132367 20040116 23:00 0.01     
      COOP:132367 20040117 00:00 0.04     
      COOP:132367 20040117 01:00 0.02     
      COOP:132367 20040117 02:00 0.00  

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

1 Ответ

0 голосов
/ 13 сентября 2018

Со страницы справки textcan :

textcan пытается сопоставить данные в файле со спецификатором преобразования в formatSpec. Функция textcan повторно применяет formatSpec ко всему файлу и останавливается, когда не может сопоставить formatSpec с данными.

Итак, первая проблема - строки заголовка. Вы должны отказаться от них. Например, вручную читая 2 строки (используя fgetl). Далее вы должны убедиться, что формат соответствует данным. Вы пытались прочитать 2 целых числа и число с плавающей точкой, но у вас также есть название станции.
Я думаю, что следующее должно быть в порядке:

fileID = fopen('rainfall.txt');
l = fgetl(fileID);
l = fgetl(fileID);

chunk = textscan(fileID,'%s:%d %d %d %f','Delimiter',' ',...
'MultipleDelimsAsOne',1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...