1

ここでは、.dat ファイルにあるデータの 1 つを共有しています。16162 個の異なるファイルがあります。すべてを 1 つのファイルにマージし、matlab で読みたいと思っています。1 つのファイルから 3 つのパラメーターの値を抽出し、行ごとまたは列ごとに配置する必要があります。Cシャープコードを使えばできますが、matlabを使ってやりたいです。コードを書くのを手伝ってくれる人はいますか?

1 つのサンプル ファイル データを次に示します。

分布: モノモーダル対数正規 n : 1.000 r_mod: .010 sigma: 1.400

数濃度、表面。濃度、体積濃度 (cm^-3) (μ^2cm^-3) (μ^3cm^-3) .1087E+01 .1866E-02 .7878E-05

部。通り 半径、サーフ。通り 半径、巻。通り 半径: .1149E-01 .1169E-01 .1201E-01

表面平均半径、体積平均半径 : .1267E-01 .1392E-01

効果 差異 : .9939E-01

たとえば、3 つのパラメーター (r_mod、sigma、Surface は半径を意味します) を抽出または読み取りたいとします。このページに配置したファイルのこれら 3 つのパラメーターに対応する値は、.010、1.400、.1267E-01 です。

出力は次のようになります(これが必要です):

r_mod   sigma   surface mean radius 
.01     1.4        1.27E-02 
.02     1.4        2.67E-02 
.03     1.4        3.98E-02 
...     ..           .. ..  
..       ..         .. .. 

同じディレクトリに何千もの同様のファイルがあります。これらすべてのファイルを matlab で読み取りたいのですが、出力はこのように単一のファイルに表示されるはずです。

4

1 に答える 1

1

数値を除いてすべてのファイルが厳密に同一である場合は、Matlab 関数を使用してtextscan各行の形式を指定してみてください。

これを行う方法の例を次に示します。

fid=fopen('text.dat','r');
format={'DISTRIBUTION: monomodal log-normal n : %f r_mod: %f sigma: %f'; ...
        'number conc., surface. conc., volume conc. (cm^-3) (mu^2cm^-3) (mu^3cm^-3) %f %f %f'; ...
        'part. ave. radius, surf. ave. radius, vol. ave. radius : %f %f %f'; ...
        'surface mean radius, volume mean radius : %f %f'; ...
        'eff. variance : %f'};
data=cell(numel(format),1);
for i=1:numel(format)
    data{i}=textscan(fid,format{i},1);
end
fclose(fid);

この例では、セル配列の数値にアクセスできますdata。r_mod はdata{1}{2}、sigma はdata{1}{3}、Surface は半径などを意味data{4}{1}します。次に、これらのデータを整理しfprintf、ヘッダーを書き込んでdlmwriteデータを追加するためにコレクションをファイルに保存するだけです。

于 2012-04-03T14:22:00.637 に答える