1

処理する csv ファイルが多数あります。各ファイルで選択した列のみが必要で、特定のフォルダーからすべてのファイルを読み込み、1 つの結合ファイルとして出力します。これがエラーで実行されている私のコードです....誰かがこの問題を解決するのを手伝ってくれますか?

data_directory = 'C:\Users\...\data';
numfiles = 17;
for n = 1:numfiles
    filepath = [data_directory,'data_', num2str(n),'_output.csv'];
    fid = fopen (filepath, 'rt');
    wanted_columns= [2 3 4 5 10 11 12 13 14 15 16 17 35 36 41 42 44 45 59 61];
    format = [];
    columns = 109;
for i = 1 : columns;
    if any (i == wanted_columns)
        format = [format '%s'];
    else
        format = [format '%*s'];
    end
end
    data = textscan(fid, format, 'Delimiter',',','HeaderLines',1);
    fclose(fid);
end
4

2 に答える 2

0

ベクトル化された方法でフォーマット文字列をセットアップする別の方法を次に示します。

fcell = repmat({'%*s '},1,n_columns);
fcell(wanted_columns) = {'%s '};
formatstr = [fcell{:}];

Noticeformatは MATLAB の組み込み関数であり、変数名には使用しない方がよいでしょう。

于 2013-02-26T03:57:29.630 に答える
0

ファイルが正しく開いているかどうかを確認する必要があると思います。エラーメッセージは、これが当てはまらないことを示しているようです。そうでない場合は、filepathが正しいかどうかを確認してください。

fid = fopen (filepath, 'rt');
if fid == -1
    error('Failed to open file');
end

ここでエラーがスローされた場合は、 に問題があったことがわかります'fopen'

もちろん、あなたのコンピューターにどのファイルがあるかはわかりませんが、ファイル名の'...'は実際のmatlabファイルにはなく、SOに関する質問にのみ含まれていると思います。'data'しかし、実際のファイル名には 1 回しか含まれていないのに、単語を繰り返しているのではない'data'でしょうか? コーディングすると、ファイル名は''C:\Users\...\datadata_1_output.csv'. でまたはで削除'data'する必要がありますか?data_directoryfilepath = ...

于 2013-02-26T01:47:17.610 に答える