掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ファイルから配列データを動的配列への一括読み込み (ID:151235)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
AAAAAさん、ありがとうございます。 ファイルから動的配列へ読み出すルーチンと言う事でしょうか? TMemoryStreanを使うのですね。 既にTFileStreamで作成しているので、修正は少々大変そうです。 現、TFileStreamを使用している状況での不可解な状況について、コメント頂く事は可能でしょうか? 先のRESでも触れました様に行毎のファイルからの直接読み込みでは、問題も生じています。 その為、一括で全て読み込み、動的配列へコピーする案が1つです。 動的配列へ直接ファイルから読み込めれば、コピーの手間が省けます。また、その読み込みも短時間です。 然しながら、問題は読み込み可能なマトリックサイズです。(300x300x300)ではAccess Violationが発生してしまいます。(100x100x100)でエラーなく進めます。 ただ、(300x300x300)でも動的配列への読み込み自体はエラーなく完了出来ています。 分ってきた事は、ファイルからのデータを保存する為の動的構造体配列があるのですが、そのサイズが、ファイルから行毎に配列データを読み込んでいる途中で、そのサイズが変わってしまい、その為、その後のデータ読み込みでエラーになっている様です。 ファイル毎に読み込むべきデータの数が違うため、受け皿としての構造体配列も動的です。 例えば、読み込むべきデータ数が50個として、上述の三次元配列はその内の一項目と言う事になります。 (300x300x300)を読み込む直前まではこの構造体配列の要素は50個ですが、三次元配列を読み込むと(エラーはありません)、構造体配列は131071個と膨大な数になっています。 この時、この受けの構造体に初めに読み込んだ、1番目と2番目のデータ内容が書き変わってしまっています。 どうも、配列操作がうまくいっていない様子ですが、その場所が分かりません。 idata2 : Array of Array of Array of Word; // 実際には構造体のメンバとして定義 begin SetLength( RMTX[idx].idata2, 300, 300, 300 ); for k := 0 to Z次元のサイズ-1 do for j := 0 to Y次元のサイズ-1 do begin fs.Read( idata2[0][j][k], Sizeof(Word)*X次元のサイズ); end; end; この様にコーディングして、ファイルからの読み込み自体は完了されます。 SetLengthで300x300x300を確保した時点では、構造体数は正常です。 三重forループのk=9まで構造体数は青樹ですが、k=10で構造体数が188となっていました。(元の構造体数は57) 非常に不可思議です。 如何でしょう。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.