0

そのため、そのようなコンテンツを含む大きなtxtファイルがあります(長さ20mbsなど)

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の配列を取得したいのですが、そのようなことは可能ですか?それを行う方法は?

4

1 に答える 1

1

以下は、8x8 マトリックスのテーブル M と、1x4 行ベクトルのテーブル V を生成します。

オプションで、サイズ n の配列として M と V を前もって作成できます。これらの行のコメントを外してください。スキャンの 100 の Matrix-Vector ペアに対してハードコーディングされていることがわかります。必要に応じて n を増やします。fscanf の失敗を検出してループから抜け出すことにより、次のアイテムのスキャンに失敗した場合でも停止します。

私の例では、Matrix と Vector のペアを 3 つだけ含むプレーンテキスト データ ファイルを使用しましたが、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
于 2011-02-01T19:22:48.047 に答える