我在Windows 7机器上使用 MatlabR2011a 。 我有一个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
我该如何解决这个问题?非常感谢你的帮助!
答案 0 :(得分:1)
在while循环中,剪切线
x=fgetl(fid)
...并在j = j + 1之后将其粘贴到结束语句之前。
发生错误是因为你在while语句之前得到一行,然后你使用while语句来测试字符串的有效性(到目前为止都很好),但是在你执行字符串操作之前立即获得后续行。在while块的开头调用fgetl可能会返回一个EOF,导致后续的字符串操作函数失败。
另外......如果你设置你的for循环
,代码会更强大for k=1:numel(Files)
答案 1 :(得分: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