Есть ли способ объединить столбцы из нескольких текстовых файлов в один текстовый файл с помощью Matlab? - PullRequest
1 голос
/ 15 января 2020

Я использую Matlab для объединения столбцов из 4 отдельных текстовых файлов в один новый текстовый файл в Matlab. Каждый текстовый файл имеет одинаковое количество строк (5478). Я нашел эту похожую проблему здесь ...

Прочитать несколько текстовых файлов и импортировать каждый из них в виде столбцов

Я принял второе предложение Рэя по этой ссылке, но оно все еще не сработало. Мой код выглядит следующим образом ...

 textDataMatrix = zeros(5478, 4);
 t = {'prec', 'rsds', 'tmax', 'tmin'};

  for k = 1:4
    Mead_NE_Climate_1985_1999 = [t{k} '_outfile_mead.txt'];
    fid = fopen(Mead_NE_Climate_1985_1999, 'rt');
    textData = fread(fid);
% Place the k'th text data in the k'th column
  textDataMatrix(:,k) = textData;
  fclose(fid);
 end  

По какой-то причине я получаю следующую ошибку ...

Несоответствие размера присвоения подписи.

Ошибка в Mead_Text_Climate (строка 10) textDataMatrix (:, k) = textData;

Я визуально осмотрел все текстовые файлы, и каждый из них имеет одинаковое количество строк / строк. Поэтому я изо всех сил пытаюсь понять, почему это не работает. Кто-нибудь может помочь? Спасибо за ваше время! Первые несколько строк, содержащих суточные значения осадков

Ответы [ 2 ]

1 голос
/ 15 января 2020

Попробуйте использовать readmatrix. Что хорошо в этой функции, так это то, что она может обрабатывать NaN значений, что есть в некоторых ваших текстовых файлах. Кроме того, поскольку в ваших текстовых файлах есть запятые, это может привести к путанице в функции и появлению второго пустого столбца. Просто поместите в первый столбец, чтобы быть в безопасности. Обратите внимание, что эта функция существует в версии 2019a или выше:

textDataMatrix = zeros(5478, 4);
t = {'prec', 'rsds', 'tmax', 'tmin'};
for k = 1:4
    Mead_NE_Climate_1985_1999 = [t{k} '_outfile_mead.txt'];
    textData = readmatrix(Mead_NE_Climate_1985_1999);
    textDataMatrix(:,k) = textData(:,1);
end
0 голосов
/ 15 января 2020

fread читает файлы в двоичном виде, даже если вы fopen свои файлы в текстовом режиме. Вывод представляет собой вектор байтов (но хранится как двойные). (См. matlab do c для fread )

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

Предполагая, что данные в ваших файлах являются числами с плавающей запятой (и в конце каждой строки запятая), следующие действия должны делать то, что вы хотите:

textDataMatrix = zeros(5478, 4);
t = {'prec', 'rsds', 'tmax', 'tmin'};

for k = 1:4
   Mead_NE_Climate_1985_1999 = [t{k} '_outfile_mead.txt'];
   fid = fopen(Mead_NE_Climate_1985_1999, 'rt');
   textData = fscanf(fid, '%f,');
   textDataMatrix(:,k) = textData;
   fclose(fid);
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...