Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 1118

 
  FileReadArray(file_handle,arr);

Veuillez nous conseiller sur les développements possibles.

J'ai un tableau [100], j'ai aussi enregistré un fichier binaire de taille [1000], comment retourner le tableau des 100 dernières valeurs du fichier binaire. Y a-t-il quelque chose d'universel ? Je travaille à nouveau sur ce sujet depuis 12 heures et rien.

 
Top2n:
  FileReadArray(file_handle,arr);

Veuillez me conseiller sur les développements possibles.

J'ai un tableau [100], j'ai aussi enregistré un fichier binaire de taille [1000], comment retourner le tableau des 100 dernières valeurs du fichier binaire. Y a-t-il quelque chose d'universel ? Ça fait 12 heures que je travaille là-dessus et rien.

Si je me souviens bien, il a été écrit dans mql4, que si count = WHOLE_ARRAY ou si la valeur dépasse le nombre d'éléments du tableau, alors le tableau entier est écrit à la fin. Et il n'a rien dit à propos d'une quelconque marge. C'est-à-dire qu'il est hors de question de ne pas mentionner 1 000.

Pour le vérifier, comptez le nombre de valeurs écrites et la taille du fichier.

 
Alexey Viktorov:

Si je me souviens bien, il a été écrit dans mql4, que si count = WHOLE_ARRAY ou si la valeur dépasse le nombre d'éléments du tableau, le tableau entier est écrit à la fin. Et il n'a rien dit à propos d'une quelconque marge. Il peut donc être absolument hors de question qu'il n'y ait pas une marge de 1 000 000 de points.

Pour le vérifier, calculez le nombre de valeurs écrites et la taille du fichier qui en résulte.

Je ne veux pas dire qu'après avoir écrit le tableau dans le binaire, de nouvelles données apparaissent, et que je continue à les écrire dans le binaire via un nouveau tableau dimensionné (= la dimension de la colonne du tableau primaire), chaque fois jusqu'à la fin du fichier, pour une nouvelle colonne j

alors nous devons retirer du binaire les données dont le nombre est égal à l'index du tableau original, qui a été transféré au binaire lors de la première intégration. Cependant, les dernières données seront incluses dans ce tableau limité, car le binaire est plus grand que le tableau primaire, puisque des lignes secondaires ont été ajoutées. Les rangées secondaires doivent aller dans le tableau de lecture, et les premières rangées en binaire doivent être hors de la zone.

 
Top2n:

Je ne veux pas dire qu'après avoir écrit le tableau dans le binaire, de nouvelles données apparaissent après un moment, et je continue à les écrire dans le binaire via un nouveau tableau dimensionné (= dimension de la colonne du tableau primaire), chaque fois jusqu'à la fin du fichier, pour une nouvelle colonne j

alors nous devons retirer du binaire les données dont le nombre est égal à l'index du tableau original, qui a été transféré au binaire lors de la première intégration. Cependant, les dernières données doivent être supprimées de manière à ce que les dernières données soient incluses dans ce tableau limité, car le binaire est plus grand que le tableau primaire en raison de l'ajout de lignes secondaires.

Il n'est donc pas nécessaire d'attribuer une dimension au tableau avant de le lire. Si ce ne sont pas les premières données qui sont nécessaires, il faut alors calculer la taille en octets et décaler la position de départ de la lecture de la bonne quantité.
 
Alexey Viktorov:
Il n'est donc pas nécessaire d'attribuer une taille au tableau avant de le lire. Si ce ne sont pas les premières données qui sont nécessaires, calculez la taille en octets et décalez la position de départ de la lecture de la bonne quantité.

C'est la question de savoir comment calculer les octets

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

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

C'est la question comment calculer les octets

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

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

Si les données sont de type double, divisez la taille du fichier par le nombre d'octets occupés par le nombre de type double, c'est-à-dire par 8.

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

Si les données sont doubles, il faut diviser la taille du fichier par le nombre d'octets occupés par le nombre double, c'est-à-dire par 8.

Est-ce parFileFindFirst?

ou simplement scanner chaque nouvelle ligne en octets

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

FileReadArray(file_handle,arr,file_size,WHOLE_ARRAY);
mauvais
 
Top2n:
AvecFileFindFirst?
Vous avez le nom du fichier et son handle.
 
Top2n:

ParFileFindFirst?

Ou simplement en résumant chaque nouvelle ligne en octets

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

FileReadArray(file_handle,arr,file_size,WHOLE_ARRAY);
ce n'est pas bien.

Vous n'auriez pas dû corriger votre message après y avoir répondu...

Faux. Avant de lire un tableau, définissez sa taille file_size = FileSize(handle) ; et divisez-la par la mémoire occupée par le type de données, c'est-à-dire pour un double par 8. Vous obtenez le nombre de numéros dans le fichier. Si le tableau est bidimensionnel, le nombre d'enregistrements dans le fichier sera deux fois moins élevé. Et vous obtenez le nombre d'octets à décaler pour lire la ligne souhaitée.

 
Alexey Viktorov:

Vous auriez dû corriger votre message après y avoir répondu...

Faux. Avant de lire un tableau, définissez sa taille file_size = FileSize(handle) ; et divisez-la par la mémoire occupée par le type de données, c'est-à-dire pour un double par 8. Vous obtenez le nombre de numéros dans le fichier. Si le tableau est bidimensionnel, le nombre d'enregistrements dans le fichier sera deux fois moins élevé. Et vous obtenez le nombre d'octets à décaler pour lire la ligne souhaitée.

J'ai fini par diviser par 8000 pour que les valeurs du tableau rentrent dans leurs index.