dawnoflife
dawnoflife

Reputation: 1652

Writing data to excel files, MATLAB

I am using MatlabR2011a on my Windows 7 machine. I have a folder of 635 text files. Each file contains multiple rows and 2 columns. I am trying to loop through the folder and read each file and write these values to excel. So far this is what I have:

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

It keeps giving me the following error after finishing reading the first file.

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

A sample input file looks like this:

  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

How can I fix this? Would appreciate help with this!

Upvotes: 1

Views: 4332

Answers (2)

yuk
yuk

Reputation: 19870

Since all your data are numeric this should work. Give it a try.

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

Upvotes: 1

learnvst
learnvst

Reputation: 16195

In the while loop, cut the line

x=fgetl(fid)

...and paste it before the end statement right after j=j+1.

The error occurs because you get a line before the while statement, then you use the while statement to test validity of the string (all fine so far), but then immediately get the subsequent line before you perform your string operation. The call to fgetl at the start of the while block could return an EOF, causing subsequent string manipulation functions to fail.

Also... The code would be more robust if you set your for loop like so

for k=1:numel(Files)

Upvotes: 1

Related Questions