0

私は本当に Matlab の初心者なので、間違った構文を使用しても怒らないでください。現在、特定のディレクトリのすべての .xlsx ファイル名を配列に入れる小さなプログラムを作成しています。ここで、ファイルを名前に基づいて 2 つの異なる配列に分けたいと考えています。これは私が試したものです:

files = dir('My_directory\*.xlsx')
file_number = 1;
file_amount = length(files);
while file_number <= file_amount;
    file_name = files(file_number).name;
    filescs = [];
    filescwf = [];
    if strcmp(file_name,'*cs.xlsx') == 1;
        filescs = [filescs,file_name];
    else
        filescwf = [filescwf,file_name];
    end
    file_number = file_number + 1
end

ここでの考え方は、最後に「cs」が含まれているかどうかをstrcmp(file_name,'*cs.xlsx')確認することです。file_nameある場合は に入れられfilescs、そうでない場合は に入れられfilescwfます。しかし、これはうまくいかないようです...

何かご意見は?

4

3 に答える 3

0

strcmpなどのワイルドカードでは機能しません*cs.xlsx。別のアプローチについては、この質問を参照してください。

于 2013-10-10T11:22:15.120 に答える
0

strcmp(file_name,'*cs.xlsx')file_nameと同一かどうかをチェックし*cs.xlsxます。その名前のファイルが存在しない場合 (ヒント: '*' をファイル名の一部として使用できるファイル システムはほとんどありません)、常に false になります。(ところで: '==1' 比較やそれぞれの行のセミコロンは必要ありません)

ここで配列インデックスを使用して、比較するファイル名の関連部分を抽出できます。file_name(1:5)、たとえば、最初の 5 文字がfile_name(end-5:end)表示され、最後の 6 文字が表示されます。

于 2013-10-10T11:22:22.503 に答える
0

を使用regexpして、各ファイルの最後の文字を確認し、すべてのファイル名cellfunに適用できregexpます。

ここでgetIndexは、 で終わるすべてのファイルに 1 が入りますcs.xlsx。その部分が最後にある(?=$)ことを確認してください。cs.xlsx

files = dir('*.xlsx')
filenames = {files.name}';   %get filenames

getIndex = cellfun(@isempty,regexp(filenames, 'cs.xlsx(?=$)'));
list1 = filenames(getIndex);
list2 = filenames(~getIndex);
于 2013-10-10T12:05:41.190 に答える