2012-03-22 34 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 

が、私はこれをどのように修正することができますか?これに助けていただければ幸いです! whileループで

答えて

1

、ライン

x=fgetl(fid) 

をカット...と右のJ = J + 1の後に終了文の前にそれを貼り付けます。

エラーwhileステートメントの前に行を取得し、whileステートメントを使用して文字列の有効性をテストしますが、文字列操作を実行する前にすぐに後続の行を取得するために発生します。 whileブロックの開始時にfgetlを呼び出すと、EOFが返され、後続の文字列操作関数が失敗する可能性があります。すべてのデータは、これは動作するはずの数値ですので、あなたがそう

for k=1:numel(Files) 
+0

今は一度も実行されていないと思います。 Excelファイルが空白です。おそらく 'x = fgetl'コマンドがそれほど遅いからでしょうか? whileループの前に同じ場所に最初の 'x = fgetl'コマンドを残すべきですか? – dawnoflife

+0

はい。 whileループの前に最初のものを残す。秒を動かす。 – learnvst

+0

私はループを使用している方法が間違っていると思います。それは現在の細胞を上書きしています。 – dawnoflife

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

'dlmread'コマンドで' DELIMITERは単一文字でなければならない 'エラーです。 – dawnoflife

+0

申し訳ありませんが、愚かな間違い。答えを訂正しました。 – yuk

関連する問題