Запись данных в файлы Excel, MATLAB - PullRequest
1 голос
/ 23 марта 2012

Я использую MatlabR2011a на моем компьютере с Windows 7.У меня есть папка из 635 текстовых файлов.Каждый файл содержит несколько строк и 2 столбца.Я пытаюсь перебрать папку, прочитать каждый файл и записать эти значения в Excel.Пока что это то, что у меня есть:

close all; clc;
  dirname = uigetdir;
  Files = dir(fullfile(dirname,'*.txt'))

  for k = 1:635
      j =1
      filename = fullfile(dirname,Files(k).name);
      fid = fopen(filename);
      x = fgetl(fid)
      while ischar(x)
          x = fgetl(fid)
          a2 = strtrim(x);
          a3 = textscan(a2,'%s');
          a4 = a3{1}{1};
          a5= a3{1}{2};
          pos3 = strcat('A',num2str(j));
          xlswrite('sample_output',{a4,a5},'Sheet1',pos3)
          j = j+1;
      end
         fclose(fid);
  end

После окончания чтения первого файла он продолжает выдавать следующую ошибку.

  Error using ==> strtrim Input should be a string or a cell array of strings.

Пример входного файла выглядит следующим образом:

  15076 4636259
  15707 4636299
  15714 1781552
  15721 4204950
  15730 2174919
  16209 4636510
  16413 4758572
  16470 4445808
  17519 311397
  17667 2116489
  17739 1729694
  18024 3210756
  18627 3714194
  18695 4192858
  19141 632766
  19318 1923574
  19438 1255216
  19493 4635020
  19771 4770250

Как я могу это исправить?Буду признателен за помощь в этом!

Ответы [ 2 ]

1 голос
/ 23 марта 2012

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

dirname = uigetdir;
Files = dir(fullfile(dirname,'*.txt'))
j =0;
for k = 1:numel(Files)
  filename = fullfile(dirname,Files(k).name);
  x = dlmread(filename,'\t'); %# I assume tab-delimiter
  j = j + size(x, 1);
  xlswrite( 'sample_output', x, 'Sheet1',sprintf('A%d',j) )
end
1 голос
/ 23 марта 2012

В цикле while обрежьте линию

x=fgetl(fid)

... и вставьте его перед оператором end сразу после j = j + 1.

Ошибка возникает из-за того, что вы получаете строку перед оператором while, затем вы используете оператор while для проверки правильности строки (пока все нормально), но затем сразу получаете следующую строку перед выполнением вашей строковой операции. Вызов fgetl в начале блока while может вернуть EOF, что приведет к сбою последующих функций манипуляции со строками.

Также ... Код был бы более надежным, если вы установите цикл for следующим образом:

for k=1:numel(Files)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...