2

私が書いているラボ レポートでは、約 90 のデータセットを分析する必要があります。残念ながら、それらはすべて「小さな単結晶 si iv 曲線 パート 1 106w_m^2」という名前のテキスト ファイルであり、ファイル拡張子はありません。それらをすべて1つのフォルダーに入れています。後で操作するために、それぞれを独自の変数に元の名前で入力したいと思います。これには、ファイル名のスペースをアンダースコアに置き換え、カラットを削除する必要があります。これを行う .m ファイルを作成したいと思います。これまでのところ、私はこれを持っています:

function [t]=makedata()
%makes data 
x=dir;
i=0;
for l=3:length(x)
    i=i+1;
    y=x(l).name;
    t=y(1:end-5);
    t=regexprep(t,' ','_');
    t=importdata(y);
end
end

明らかに、このコードは機能しません。私の MATLAB スキルが弱いことはわかっているので、助けていただければ幸いです。これまでのところ、私のコードは dir コマンドを使用してディレクトリ内のすべてのデータを収集し、そのデータをループして名前を出力可能な名前に変更し、データをインポートします。

どうすればこれを機能させることができますか?さまざまな名前の変数を出力する方法がわかりません。eval コマンドを使用して調査しましたが、それを正常に実装する方法がわかりません。また、FAQにはその方法を避けるように記載されています。

助けてくれてありがとう。これに対する解決策をオンラインでまだ見つけることができませんでした。

4

2 に答える 2

1

単にファイルのリストを取得して、1つのリストからそれらを処理してみませんか?ファイルごとに1つの変数名を作成するというこの混乱をすべて経験する必要があるのはなぜですか?

を使用しdir()て、構造体の素晴らしい配列を取得します。各構造体にはファイルの情報があります。

 list_of_files=dir([fullfile(pwd) '\\*.txt']);
 list_of_files(1).name
 list_of_files(2).name
 etc...

ファイルに拡張子がなく、あなたが言うように、それらがすべて同じディレクトリにある場合は、単に書く

  list_of_files=dir(fullfile(pwd));

pwd上記のディレクトリに使用した場所。場合によっては、ファイルシステムのどこにあっても正しいディレクトリ名を使用してください。

これで、呼び出されたこのONE変数list_of_filesを使用して、名前を使用して各ファイルを開き、ファイル内のデータを読み取り、ファイルに対してその他の処理を実行できます。

ファイル名ごとに1つの変数を作成するというアプローチは、この単純な問題を解決するための間違った方法です。

于 2012-11-11T06:18:22.997 に答える
0

これらのサポートされていない文字を取り除く 1 つの方法は、genvarname関数です。個人的には、目的に応じたすべての関連情報を含む構造を作成することをお勧めします。このような構造を配列に入れてから、配列のすべての要素を処理できます。

そうすれば、ファイル名から変数名を実際に把握する必要がなくなり、処理がはるかに簡単になります(そうしないと、次のすべてのステップで処理する変数名のリストが必要になるか、個別の変数ごとにコードを複製する必要があります/data セットであり、エラーが発生しやすい)。

したがってfunction data = importSingleDataFile(filename)、ファイルを読み取り、 のような構造を返す関数を作成しますdata = struct('filename', filename, 'data', yourLoadedData)。次に、別の関数で、すべてのファイルをループして、それらの構造を配列に連結するだけです。

于 2012-11-11T06:23:48.220 に答える