0

私はMATLABプログラミングに不慣れであり、構文のいくつかは私を免れます。だから私は少し助けが必要です。さらに、複雑なループのアイデアが必要です。

これが私が持っているものの内訳です

  • 12個の個別.datのファイル。それぞれoutput_1_x.datoutput_2_x.dat、などのタイトルが付けられています。
  • 各ファイルは、実際には、分離されて処理された全体の1つの部分です。
  • .datファイルは約です。3.9 GB

これが私がする必要があることです

  • それぞれの個別のファイルからのすべてのデータを含む単一のファイルを作成します。つまり、元のファイルを再作成する必要があります。
  • この完全な出力ファイルを次のように呼び出しますoutput_final.dat
  • これはMATLABで実行する必要があり、他の選択肢はありません(実際には、おそらくあります。以下の注を参照してください)

暗示されるもの

  • fread3.9 GBのファイルをチャンクまたはパケットに分割する必要があります(埋め込みループを使用しますか?)
  • これらのパケットは、順番に読み取ってから書き込む必要があります
  • 1つのファイルが読み取られてから書き込まれるoutput_final.datと、次のファイルが自動的に読み書きされます(マスターループ)。

まあ、それはほとんどそれです。「複数のファイルのマージ」を検索したところ、これが見つかりまし。それは私がする必要があることではありません...私はファイルの一部、またはファイルからのデータを取り込んで、それを新しいものに書き込む必要はありません。私は単に...連結しています...?これはJavaまたはPerlで簡単ですが、私はツールとしてMATLABしか持っていません。

注:ただし、OpenSUSEの非常に強力なボックスでKDEを実行しています。たぶん、ターミナルの専門家でもある誰かが、カーネルからこれを行うためのコマンド/スクリプトを知っていますか?

4

2 に答える 2

1

2つのファイルでmatlab.io.matfileclassオブジェクトを使用することをお勧めします。

matObj1 = matfile('datafile1.mat')
matObj2 = matfile('datafile2.mat')

これにより、データがメモリにロードされません。次に、オブジェクトのメソッドを使用して、あるファイルから別のファイルに変数を順番に保存できます。

matObj1.varName = matObj2.varName

を使用して1つのファイル内のすべての変数を取得しfieldnames(mathObj1)、ループして1つのファイルから別のファイルにコンテンツをコピーできます。次に、コピーしたフィールドを削除して、スペースを空けることができます。または、データを直接移動することで、もう少しリスクの高い手順を使用できます。

matObj1.varName = rmfield(matObj2,'varName')

免責事項:試していない場合は、自己責任で使用してください。

于 2013-03-06T22:54:17.933 に答える
1

したがって、このサイトでは通常、whathaveyoutried.comを参照しますが、この質問はよく表現されています。

コードは書きませんが、どのように行うかを説明します。最初にfread、ファイルが必要な理由について少し混乱しています。あるファイルを別のファイルの末尾に追加しているだけですか?

実際に unix コマンドを使用して、目的を達成できます。

files = dir('*.dat');
for i = 1:length(files)
    string = sprintf('cat %s >> output_final.dat.temp', files(i).name);
    unix(string);
end

そのコードはすべてのファイルをループし、すべてのコンテンツをパイプする必要がありますoutput_final.dat.temp(名前を変更するだけで、何にも含めたくありません)。

ただしfread、何らかの方法で行を解析したいために本当に使用したい場合は、同じプロセスを使用できます。

files = dir('*.dat');
fidF = fopen('output_final.dat', 'w');
for i = 1:length(files)
    fid = fopen(files(i).name);
    while(~feof(fid))
        string = fgetl(fid) %You may choose to parse the string in some manner here
        fprintf(fidF, '%s', string)
    end
end

行を解析していない場合は、はるかに時間がかかることを覚えておいてください。

お役に立てれば。

于 2013-03-06T22:51:03.557 に答える