2012-03-22 142 views
1

我在我的Windows 7机器上使用了MatlabR2011a。 我有一个635文本文件的文件夹。每个文件包含多行和2列。我试图循环浏览文件夹并读取每个文件并将这些值写入excel。到目前为止,这是我所拥有的:将数据写入excel文件,MATLAB

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 
756 
    18627 3714194 
    18695 4192858 
    19141 632766 
    19318 1923574 
    19438 1255216 
    19493 4635020 
    19771 4770250 

我该如何解决这个问题?希望对此有所帮助!

回答

1

在while循环,剪线

x=fgetl(fid) 

...右后当J = J + 1结束语句之前将其粘贴。

由于您在while语句之前得到一行,然后使用while语句来测试字符串的有效性(迄今为止都很好),但是在执行字符串操作之前立即获取后续行,则会发生该错误。在while块的开始处对fgetl的调用可能会返回一个EOF,导致后续的字符串操作函数失败。

而且......如果你设置你的循环,像这样

for k=1:numel(Files) 
+0

不要以为它现在正在执行一次。 excel文件是空白的。可能是因为'x = fgetl'命令太晚了?我应该在while循环之前的第一个'x = fgetl'命令放在同一个地方吗? – dawnoflife 2012-03-23 00:12:47

+0

是的。在while循环之前留下第一个。移动第二个。 – learnvst 2012-03-23 00:15:07

+0

我认为我使用循环的方式是错误的。它正在覆盖当前的单元格。 – dawnoflife 2012-03-23 00:23:40

1

由于所有数据都是数字这应该工作的代码将更加强劲。试一试。

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 
+0

它给了我'DELIMITER必须是'dlmread'命令的单个字符.'错误。 – dawnoflife 2012-03-23 02:16:29

+0

对不起,愚蠢的错误。更正了答案。 – yuk 2012-03-23 13:02:50