2011-02-01 7 views
0

だから私は(長い20mbsのような)このような内容の大txtファイルを持っているMaple:このようなCSV(カンマ区切り)文書を解析するにはどうすればよいですか?

20 30 40 550 60 70 80 91 
20 30 40 50 60 70 80 92 
20 30 40 50 60 70 80 93 
20 30 40 50 64 70 80 90 
20 30 40 50 60 70 80 90 
20 30 40 50 60 70 80 90 
20 30 40 40 60 70 80 90 
40 30 40 50 60 70 80 90 

4 5 6 6 

20 30 40 50 60 70 80 91 
20 30 40 50 60 70 80 92 
20 30 40 50 60 70 80 93 
2 30 40 50 64 70 80 90 
20 30 20 50 60 70 80 90 
20 30 40 50 60 70 80 90 
20 30 40 40 60 70 80 90 
40 30 40 50 60 70 80 90 

4 5 1 6 

20 30 40 50 60 70 80 91 
20 30 40 50 60 70 80 92 
20 30 40 50 60 70 80 93 
20 30 40 50 64 70 80 90 
20 30 40 50 60 70 80 90 
20 30 40 50 60 70 80 90 
20 1 40 40 60 70 80 90 
40 30 40 50 60 70 80 90 

4 5 6 1 

私はその文書のうち、行列の8x8と行列1 * 4の配列の配列を取得したいがそのようなことも可能であるし、どうやってするの?

+0

与えられたデータは、コンマではなくスペースで区切ります。 – acer

答えて

1

以下は、8×8行列のテーブルMと、1×4行のベクトルのテーブルVとを生成する。

オプションで、サイズnの配列としてMおよびVを作成できます。これらの行のコメントを外すだけです。 100のMatrix-Vectorペアのスキャンでハードコードされていることがわかります。あなたが望むようにnを増やしてください。それは、fscanfの失敗を検出し、ループから抜け出すことによって、次のアイテムのスキャンに失敗したときには、とにかく停止します。

私の例では、3組のMatrixとVectorを含む平文データファイルを使用し、4回目のスキャン試行で失敗したときにブレークしました。

restart: 
Z:="C://TEMP//mydata.txt": 

fclose(Z); 

#M:=Array(1..100): 
#V:=Array(1..100): 

for i from 1 to 100 do 
    try 
     M[i]:=fscanf(Z,"%{8,8}ldm")[1]; 
     V[i]:=fscanf(Z,"%{4}ldr")[1]; 
    catch "end of input encountered": 
     break; 
    end try; 
end do; 

M[2]; # returns the 2nd entry (a 8x8 Matrix) of M 
V[2]; # returns the 2nd entry (a 1x4 row Vector) of V 
関連する問題