Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1118

 
  FileReadArray(file_handle,arr);

Si prega di avvisare sui possibili sviluppi.

Ho un array[100], inoltre ho salvato un file binario di dimensioni [1000], come restituire l'array del file binario degli ultimi 100 valori. C'è qualcosa di universale? Ci ho lavorato ancora per 12 ore e niente.

 
Top2n:
  FileReadArray(file_handle,arr);

Si prega di avvisare sui possibili sviluppi.

Ho un array[100], inoltre ho salvato un file binario di dimensioni [1000], come restituire l'array del file binario degli ultimi 100 valori. C'è qualcosa di universale? Ci sto lavorando da 12 ore e niente.

Se ricordo bene, era scritto in mql4, che se count = WHOLE_ARRAY o il valore supera il numero di elementi dell'array, allora l'intero array viene scritto alla fine. E non parlava di alcun margine. Cioè è fuori questione non menzionare 1.000.

Per controllarlo, contate quanti valori vengono scritti e la dimensione del file.

 
Alexey Viktorov:

Se ricordo bene, era scritto in mql4, che se count = WHOLE_ARRAY o il valore supera il numero di elementi dell'array, l'intero array viene scritto alla fine. E non parlava di alcun margine. Quindi può essere assolutamente fuori questione se non c'è un margine di 1000 mila punti.

Per verificarlo, calcolate quanti valori vengono scritti e la dimensione del file risultante.

Non voglio dire che dopo aver scritto l'array nel binario, appaiono nuovi dati, e continuo a scriverli nel binario tramite un nuovo array dimensionato (= la dimensione della colonna dell'array primario), ogni volta fino alla fine del file, per una nuova colonna j

allora abbiamo bisogno di rimuovere i dati dal binario pari in numero all'indice dell'array originale, che è stato trasferito al binario nella prima integrazione. Tuttavia, gli ultimi dati saranno inclusi in questo array limitato, perché il binario è più grande dell'array primario, dato che sono state aggiunte righe secondarie. Le righe secondarie devono andare nell'array di lettura, e le prime righe in binario devono essere fuori dall'area.

 
Top2n:

Non voglio dire che dopo aver scritto l'array nel binario, appaiono nuovi dati dopo un momento, e continuo a scriverli nel binario tramite un nuovo array dimensionato (= dimensione della colonna dell'array primario), ogni volta fino alla fine del file, per una nuova colonna j

allora abbiamo bisogno di rimuovere i dati dal binario pari in numero all'indice dell'array originale, che è stato trasferito al binario nella prima integrazione. Tuttavia, gli ultimi dati devono essere rimossi in modo tale che gli ultimi dati siano inclusi in questo array limitato, perché il binario è più grande dell'array primario a causa dell'aggiunta delle righe secondarie.

Allora non è necessario assegnare una dimensione all'array prima della lettura. Se non è il primo dato che è necessario, allora è necessario calcolare la dimensione in byte e spostare la posizione iniziale per la lettura della giusta quantità.
 
Alexey Viktorov:
Allora non c'è bisogno di assegnare una dimensione all'array prima della lettura. Se non è il primo dato che è necessario, allora calcola la dimensione in byte e sposta la posizione iniziale per la lettura della giusta quantità.

Questa è la domanda come calcolare i byte

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

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

Questa è la domanda come calcolare i byte

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

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

Se i dati sono di tipo doppio, allora dividete la dimensione del file per il numero di byte occupati dal numero di tipo doppio, cioè per 8.

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

Se i dati sono doppi, allora dividete la dimensione del file per il numero di byte occupati dal numero doppio, cioè per 8.

È diFileFindFirst?

o semplicemente scansionare ogni nuova linea in byte

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

FileReadArray(file_handle,arr,file_size,WHOLE_ARRAY);
sbagliato
 
Top2n:
ConFileFindFirst?
Avete il nome del file e il suo manico.
 
Top2n:

AttraversoFileFindFirst?

O semplicemente riassumendo ogni nuova linea in byte

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

FileReadArray(file_handle,arr,file_size,WHOLE_ARRAY);
non è giusto.

Non avresti dovuto correggere il tuo post dopo aver risposto...

Sbagliato. Prima di leggere una matrice, definite la sua dimensione file_size = FileSize(handle); e dividete per la memoria occupata dal tipo di dati, cioè per il doppio per 8. Si ottiene il numero di numeri nel file. Se l'array è bidimensionale, allora il numero di record nel file sarà due volte inferiore. E si ottiene quanti byte devono essere spostati per leggere dalla linea desiderata.

 
Alexey Viktorov:

Avresti dovuto correggere il tuo post dopo aver risposto...

Sbagliato. Prima di leggere una matrice, definite la sua dimensione file_size = FileSize(handle); e dividete per la memoria occupata dal tipo di dati, cioè per il doppio per 8. Si ottiene il numero di numeri nel file. Se l'array è bidimensionale, allora il numero di record nel file sarà due volte inferiore. E si ottiene quanti byte devono essere spostati per leggere dalla linea desiderata.

Ho finito per dividere per 8000 in modo che i valori dell'array entrassero nei loro indici.
Motivazione: