どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 1118

 
  FileReadArray(file_handle,arr);

可能な展開についてアドバイスをお願いします。

配列[100]があり、サイズ[1000]のバイナリファイルも保存されている場合、バイナリファイルの最後の100個の値を配列として返すにはどうしたらよいでしょうか。何か普遍的なものがあるのでしょうか?また12時間やっても何もない。

 
Top2n:
  FileReadArray(file_handle,arr);

可能な展開についてアドバイスをお願いします。

配列[100]があり、サイズ[1000]のバイナリファイルも保存されている場合、バイナリファイルの最後の100個の値を配列として返すにはどうしたらよいでしょうか。何か普遍的なものがあるのでしょうか?12時間やっても何もない。

私の記憶が正しければ、mql4では、count = WHOLE_ARRAY または value が配列の要素 数を超えたら、配列全体を最後に書き込むと書かれていたはずです。そして、マージンについては一切書かれていませんでした。1000を語れないということです。

それを確認するには、値がいくつ書き込まれているか、ファイルのサイズを数える。

 
Alexey Viktorov:

私の記憶が正しければ、mql4では、count = WHOLE_ARRAY または value が配列の要素 数を超えた場合、配列全体を最後に書き込むと書かれていたはずです。そして、マージンについては一切書かれていませんでした。だから、1000点満点のマージンがなければ絶対に論外かもしれない。

これを確認するには、何個の値が書き込まれたかと、その結果のファイルサイズを計算します。

バイナリに配列を書き込んだ後、新しいデータが現れて、新しい次元の配列(=主配列の列の次元)を介して、毎回、ファイルの終わりまで、新しいj列のためにバイナリに書き込み続けるという意味ではありません

の場合、最初の積分でバイナリに転送された、元の配列のインデックスと同じ数のデータをバイナリから削除する必要があります。しかし、最後のデータは、二次行が追加されているため、バイナリが一次配列より大きくなり、この限定された配列に含まれることになります。2次行はリード配列に入り、バイナリの最初の行は領域外になければなりません。

 
Top2n:

私はバイナリに配列を書き込んだ後、新しいデータが一瞬の後に現れ、私は新しい次元の配列(=主配列の列の次元)を介してバイナリに書き込み続けるという意味ではありません、ファイルの最後に毎回、新しいj列のために

の場合、最初の積分でバイナリに転送された、元の配列のインデックスと同じ数のデータをバイナリから削除する必要があります。ただし、二次行の追加により二次配列が一次配列より大きくなるため、この限定配列に最後のデータが含まれるように削除する必要があります。

そうすれば,読み込む前に配列に次元を 割り当てる必要はない.最初に必要なデータでない場合は、サイズをバイト単位で計算し、読み出し開始位置を適切な量だけシフトする必要があります。
 
Alexey Viktorov:
そうすれば、読み込む前に配列にサイズを 代入する必要がなくなります。最初に必要なデータでない場合は、サイズをバイト単位で計算し、読み出しの開始位置を適切な量だけシフトする。

それは、バイトをどのように計算するかということです。

FileWriteInteger(h,s1,INT_VALUE); //ножно ли перед записью записывать размера массива?
s1=FileReadInteger(h,INT_VALUE); //ножно ли перед восстановлением считываем размер массива?

может как то через это sizeof
 
Top2n:

これは、バイトの計算方法についての質問です

FileWriteInteger(h,s1,INT_VALUE); //ножно ли перед записью записывать размера массива?
s1=FileReadInteger(h,INT_VALUE); //ножно ли перед восстановлением считываем размер массива?

может как то через это sizeof

データがダブルタイプの 場合、ファイルサイズを ダブルタイプの数で占めるバイト数で割る、つまり8で割る。

Документация по MQL5: Файловые операции / FileSize
Документация по MQL5: Файловые операции / FileSize
  • www.mql5.com
Файловые операции / FileSize - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:

データが2倍 であれば、ファイルサイズを 2倍の数値が占めるバイト数、つまり8で割る。

FileFindFirstによる ものでしょうか?

または、バイト単位で新しい行をスキャンするだけ

Короче при записи начал суммировать вторичный массив в байтах, каждая запись плюсуется с предыдущей
file_size=+FileSize(handle); // чтобы выяснить индекс от которого открывать

FileReadArray(file_handle,arr,file_size,WHOLE_ARRAY);
不正解
 
ファイル名とそのハンドルがありますね。
 
Top2n:

FileFindFirstを通じて

または、新しい行をバイト単位でまとめるだけです。

Короче при записи начал суммировать вторичный массив в байтах, каждая запись плюсуется с предыдущей
file_size=+FileSize(handle); // чтобы выяснить индекс от которого открывать

FileReadArray(file_handle,arr,file_size,WHOLE_ARRAY);
それはおかしい。

回答後に投稿を訂正するのはやめた方がいいのでは...。

間違っている。配列を読み込む前に、そのサイズを file_size =FileSize(handle); で定義し、データ型が占めるメモリで割る(例:double は 8 で割る)。ファイルの中の数字が表示されます。配列が2次元の場合、ファイル内のレコード数は2倍少なくなる。そして、目的の行から読み出すために何バイトシフトすべきかを得ることができます。

 
Alexey Viktorov:

返信した後に訂正すればよかったのに・・・。

間違っている。配列を読み込む前に、そのサイズを file_size =FileSize(handle); で定義し、データ型が占めるメモリで割る(例:double は 8 で割る)。ファイルの中の数字が表示されます。配列が2次元の場合、ファイル内のレコード数は2倍少なくなる。そして、目的の行から読み出すために何バイトシフトすべきかを得ることができます。

結局、配列の値がインデックスに収まるように、8000で割ることにしました。