Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 1118

 
  FileReadArray(file_handle,arr);

Bitte informieren Sie uns über mögliche Entwicklungen.

Ich habe array[100], auch gespeichert binäre Datei mit Größe [1000], wie man Array der binären Datei letzten 100 Werte zurück. Gibt es etwas Universelles? Ich habe wieder 12 Stunden daran gearbeitet und nichts.

 
Top2n:
  FileReadArray(file_handle,arr);

Bitte informieren Sie uns über mögliche Entwicklungen.

Ich habe array[100], auch gespeichert binäre Datei mit Größe [1000], wie man Array der binären Datei letzten 100 Werte zurück. Gibt es etwas Universelles? Ich arbeite seit 12 Stunden daran und nichts.

Wenn ich mich richtig erinnere, wurde in mql4 geschrieben, dass, wenn count = WHOLE_ARRAY oder value die Anzahl der Arrayelemente überschreitet, das gesamte Array an das Ende geschrieben wird. Und es wurde nichts über eine Marge gesagt. D.h. es steht außer Frage, 1.000 nicht zu erwähnen.

Um dies zu überprüfen, zählen Sie, wie viele Werte geschrieben werden und wie groß die Datei ist.

 
Alexey Viktorov:

Wenn ich mich richtig erinnere, wurde in mql4 geschrieben, dass wenn count = WHOLE_ARRAY oder value die Anzahl der Arrayelemente überschreitet, das gesamte Array an das Ende geschrieben wird. Und es wurde nichts über eine Marge gesagt. Es kann also völlig ausgeschlossen sein, dass es keine 1000-Punkte-Marge gibt.

Um dies zu überprüfen, berechnen Sie, wie viele Werte geschrieben werden und die daraus resultierende Dateigröße.

Ich meine nicht, dass nach dem Schreiben des Arrays in die Binärdatei neue Daten erscheinen und ich sie über ein neu dimensioniertes Array (= die Dimension der primären Array-Spalte) jedes Mal bis zum Ende der Datei für eine neue j-Spalte in die Binärdatei schreibe

dann müssen wir die Daten aus der Binärdatei entfernen, deren Anzahl dem Index des ursprünglichen Arrays entspricht, das bei der ersten Integration in die Binärdatei übertragen wurde. Die letzten Daten werden jedoch in dieses begrenzte Array aufgenommen, da das binäre Array größer ist als das primäre Array, da sekundäre Zeilen hinzugefügt wurden. Die sekundären Zeilen müssen in den Lesebereich gehen, und die ersten Zeilen im Binärbereich müssen außerhalb des Bereichs liegen.

 
Top2n:

Ich meine nicht, dass nach dem Schreiben des Arrays in die Binärdatei nach einer gewissen Zeit neue Daten erscheinen, die ich über ein neu dimensioniertes Array (= Dimension der primären Array-Spalte) jedes Mal am Ende der Datei für eine neue j-Spalte in die Binärdatei schreibe

dann müssen wir die Daten aus der Binärdatei entfernen, deren Anzahl dem Index des ursprünglichen Arrays entspricht, das bei der ersten Integration in die Binärdatei übertragen wurde. Die letzten Daten sollten jedoch so entfernt werden, dass die letzten Daten in diesem begrenzten Array enthalten sind, da das binäre Array durch die Hinzufügung der sekundären Zeilen größer ist als das primäre Array.

Dann ist es nicht notwendig, dem Array vor dem Lesen eine Dimension zuzuweisen. Wenn es sich nicht um die ersten Daten handelt, die benötigt werden, muss die Größe in Bytes berechnet und die Startposition für das Lesen um den entsprechenden Betrag verschoben werden.
 
Alexey Viktorov:
Dann brauchen Sie dem Array vor dem Lesen keine Größe zuzuweisen. Wenn es sich nicht um die ersten Daten handelt, die benötigt werden, dann berechnen Sie die Größe in Bytes und verschieben Sie die Startposition für das Lesen um den richtigen Betrag.

Das ist die Frage, wie man Bytes berechnet

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

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

Dies ist die Frage, wie man Bytes berechnet

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

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

Wenn die Daten vom doppelten Typ sind, teilen Sie die Dateigröße durch die Anzahl der Bytes, die durch die Anzahl der doppelten Typen belegt sind, d.h. durch 8.

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

Wenn es sich um doppelte Daten handelt, wird die Dateigröße durch die Anzahl der Bytes geteilt, die von der doppelten Zahl belegt werden, d. h. durch 8.

Ist es vonFileFindFirst?

oder einfach jede neue Zeile byteweise scannen

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

FileReadArray(file_handle,arr,file_size,WHOLE_ARRAY);
falsch
 
Top2n:
MitFileFindFirst?
Sie haben den Namen der Datei und ihr Handle.
 
Top2n:

ÜberFileFindFirst?

Oder einfach jede neue Zeile in Bytes zusammenfassen

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

FileReadArray(file_handle,arr,file_size,WHOLE_ARRAY);
Es ist nicht richtig.

Sie hätten Ihren Beitrag nicht korrigieren sollen, nachdem Sie ihn beantwortet haben...

Falsch. Bevor Sie ein Array lesen, definieren Sie dessen Größe file_size = FileSize(handle); und dividieren Sie durch den vom Datentyp belegten Speicher, d.h. für double durch 8. Sie erhalten die Anzahl der Nummern in der Datei. Wenn das Array zweidimensional ist, dann ist die Anzahl der Datensätze in der Datei doppelt so hoch. Und Sie erhalten, wie viele Bytes verschoben werden müssen, um die gewünschte Zeile zu lesen.

 
Alexey Viktorov:

Sie hätten Ihren Beitrag korrigieren sollen, nachdem Sie darauf geantwortet haben...

Falsch. Bevor Sie ein Array lesen, definieren Sie dessen Größe file_size = FileSize(handle); und dividieren Sie durch den vom Datentyp belegten Speicher, d.h. für double durch 8. Sie erhalten die Anzahl der Nummern in der Datei. Wenn das Array zweidimensional ist, dann ist die Anzahl der Datensätze in der Datei doppelt so hoch. Und Sie erhalten, wie viele Bytes verschoben werden müssen, um die gewünschte Zeile zu lesen.

Am Ende habe ich durch 8000 geteilt, damit die Array-Werte in ihre Indizes passen.