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

 
Top2n:
comme résultat, j'ai divisé par 8000, pour que les valeurs du tableau rentrent dans leurs index.

Vous me dites...

Taille du fichier

Renvoie la taille du fichier en octets.

Type

Taille en octets

Valeur minimale positive

Valeur maximale

Analogique en C++

float

4

1.175494351e-38

3.402823466e+38

float

double

8

2.2250738585072014e-308

1.7976931348623158e+308

double


taille du fichier en octets, la taille occupée par le type double en octets, et il est nécessaire de la diviser par zhzhezhezhezhezhezhezhezhezhez



 
Alexey Viktorov:

Vous me dites...

Type

Taille en octets

Valeur positive minimale

Valeur maximale

Analogique en C++

float

4

1.175494351e-38

3.402823466e+38

float

double

8

2.2250738585072014e-308

1.7976931348623158e+308

double


la taille du fichier en octets, la taille occupée par le type double en octets, et il est obligatoire de diviser par zhzhezhezhezhezhezhezhezhezhezhezhez



Qu'est-ce que le zzzzzzzz ? Ça ne tient pas debout, mec, tu ne peux pas faire plus simple ?
 
Top2n:
C'est quoi un zzzzzz ? Ça ne colle pas, tu ne peux pas te calmer ?
S'il te plaît, utilise ton cerveau juste un peu. Je ne peux que vous conseiller, pas le faire pour vous. Quelles sont vos données, quelle est la dimension du tableau... Je ne veux pas me souvenir de tout ça et vous mener à la victoire.
 

Получается, что если массив динамический, то формула /16, не совсем подходит, хотя второе же измерение фиксировано, к там уже -  

Выходит, что вторичный массив записывается на первичный, возможно перед записью что то сделать нужно
FileSeek(handle,0,SEEK_END);
Люди записывают переменные в массив, возможно поможет? типо такого

int dataArraySize = ArraySize(dataArray); //записываем в переменную размер массива
int fileHandle = FileOpen("filename.dat"FILE_BIN | FILE_WRITE); // открываем файл на запись в бинарном режиме.
FileWriteInteger(fileHandle, dataArraySize);//записываем в файл размер массива
FileWriteDouble(fileHandle, dataArraySize);//записываем в файл все элементы массива

 


Le code de la ligne qui complète le fichier bin avec une nouvelle barre.

if(count==size)
        {
      //  ArrayResize(arrS,coun);  
         for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
           {
            arrS[q]=sm.d[q].m[rates_total-1];                // M(I) SMA
            coun++; 
           }
         ResetLastError();
         int handle=FileOpen(path,FILE_WRITE|FILE_BIN);
         if(handle!=INVALID_HANDLE)
           {
            //--- запишем данные массива в конец файла
            FileSeek(handle,0,SEEK_SET);
            FileWriteArray(handle,arrS);
            Print("arrS = ",arrS[0]," arrS = ",arrS[1]," arrS = ",arrS[3]);
            //--- закрываем файл
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError());
         count=1;
        }
 
Top2n:

Получается, что если массив динамический, то формула /16, не совсем подходит, хотя второе же измерение фиксировано, к там уже -  

Выходит, что вторичный массив записывается на первичный, возможно перед записью что то сделать нужно
FileSeek(handle,0,SEEK_END);
Люди записывают переменные в массив, возможно поможет? типо такого

int dataArraySize = ArraySize(dataArray); //записываем в переменную размер массива
int fileHandle = FileOpen("filename.dat"FILE_BIN | FILE_WRITE); // открываем файл на запись в бинарном режиме.
FileWriteInteger(fileHandle, dataArraySize);//записываем в файл размер массива
FileWriteDouble(fileHandle, dataArraySize);//записываем в файл все элементы массива

 


Le code de la ligne qui complète le fichier bin avec une nouvelle barre.

if(count==size)
        {
      //  ArrayResize(arrS,coun);  
         for(int q=0; q<ARRAY_SIZE_X; q++) // Перебор по периоду, колонка X
           {
            arrS[q]=sm.d[q].m[rates_total-1];                // M(I) SMA
            coun++; 
           }
         ResetLastError();
         int handle=FileOpen(path,FILE_WRITE|FILE_BIN);
         if(handle!=INVALID_HANDLE)
           {
            //--- запишем данные массива в конец файла
            FileSeek(handle,0,SEEK_SET);
            FileWriteArray(handle,arrS);
            Print("arrS = ",arrS[0]," arrS = ",arrS[1]," arrS = ",arrS[3]);
            //--- закрываем файл
            FileClose(handle);
           }
         else
            Print("Failed to open the file, error ",GetLastError());
         count=1;
        }


Je ne me souviens plus où je l'ai lu, mais si vous ouvrez un fichier en écriture uniquement, tout ce qu'il contient est supprimé.

int handle=FileOpen(path,FILE_WRITE|FILE_BIN);

Le fichier doit être ouvert pour la lecture et l'écriture.

int handle = FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
Si nous ouvrons le fichier pour la lecture seulement, alors l'indicateur d'écriture peut et même mieux ne pas être spécifié.
 
Alexey Viktorov:

Je ne me souviens plus où je l'ai lu, mais si un fichier n'est ouvert que pour l'écriture, tout ce qu'il contient est supprimé.

int handle=FileOpen(path,FILE_WRITE|FILE_BIN);

Le fichier doit être ouvert pour la lecture et l'écriture.

int handle = FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
Si nous ouvrons le fichier pour la lecture seulement, alors l'indicateur d'écriture peut et même mieux ne pas être spécifié.
Pardonnez-moi, mais j'ai déjà résolu)) le problème était l'un de ceux-ci aussi)) En fouinant un peu partout))))
 

Je pensais que c'était ça.

J'écris de nouvelles données au début, il écrit au début complet, y a-t-il un moyen d'augmenter la taille du début))

Est-il possible d'écrire jusqu'au début ou de continuer à sauvegarder jusqu'à la fin seulement ?

FileSeek(handle,0,SEEK_SET);

Et si j'économise jusqu'à la fin, et que je continue à ajouter jusqu'à la fin, comment puis-je lire depuis la fin jusqu'au bon montant ? Ou plutôt, comment capturer à partir du fichier bin le bon morceau de N à la fin ?

Ou est-ce que je l'ai fait avec les mauvaises commandes ! ?!?

J'enregistre deux tableaux à la fin - il est écrit comme je le comprends en augmentant le poids de la poubelle correctement.

Ensuite, j'essaie de transférer les données vers le tableau avec la tâche de capturer le dernier enregistrement, les bacs du fichier sont plus grands que le tableau.

  ResetLastError();
   int file_handle=FileOpen(path,FILE_READ|FILE_BIN);
   if(file_handle!=INVALID_HANDLE)
     {
      //--- прочитаем все данные из файла в массив
      //file_siz=FileSize(file_handle)/8000;
      //FileSeek(file_handle,file_size,SEEK_END);
      FileReadArray(file_handle,arr);
      //--- получим размер массива
      int siz=ArraySize(arr);
      //--- распечатаем данные из массива
      Print("arr = ",arr[1][3]," Bid = ",arr[1][2]," Ask = ",arr[0][3]);
      Print("file_siza = ",file_siz);
      //--- закрываем файл
      FileClose(file_handle);
FileSeek(file_handle,file_size,SEEK_SET);  что делает  - определяет положение массива или в бине?
 

Si je lis la section requise du fichier binaire avec

FileReadArray(file_handle,arr,0,WHOLE_ARRAY);

L'algorithme traite le tableau lui-même, les cellules manquantes sont traduites de la même manière que la position dans le bac, ce qui à son tour donne la plage demandée dans la limite de la même position que dans le bac, mais avec des zéros.

 
Top2n:

Si je lis la section requise du fichier binaire avec

FileReadArray(file_handle,arr,0,WHOLE_ARRAY);

L'algorithme traite le tableau lui-même, les cellules manquantes sont traduites de manière similaire à la position binaire, qui à son tour donne la gamme demandée dans la limite de la même position que dans le binaire, seulement avec des zéros.

Je ne comprends pas ce qui peut mal se passer...

Vous ouvrez simplement le fichier pour le lire.

handle = FileOpen(path, FILE_READ|FILE_BIN);

déplacer le pointeur vers le bon nombre d'octets dans la bonne direction

FileSeek(handle, -32, SEEK_END);
// В данном случае от конца файла на 32 байта

32 octets correspondent à 8 valeurs entières ou 4 valeurs à virgule flottante.

Si le tableau est à deux dimensions, cela signifie que nous décalons de 4 lignes si le tableau est de type int, ou de 2 lignes si le tableau est de type double.

Ensuite, nous lisons les valeurs dans le tableau déclaré au préalable comme un tableau dynamique arr[][2] ; il s'agit d'un tableau à deux dimensions.

FileReadArray(handle, arr);

C'EST ÇA ! !!

Ensuite, déterminez la taille du tableau

int size = ArrayRange(arr, 0);

et ensuite imprimer les valeurs.

int i, z;

for(i = 0; i < size; i++)

  {
   for(z = 0; z < 2; z++)
    {
     Print("arr[", i, "][", z, "]", arr[i][z]);
    }
  }
 
Alexey Viktorov:

Je ne comprends pas ce qui peut mal se passer...

Merci, toi ! Cela a marché)))

Raison: