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

 
Top2n:
come risultato, ho diviso per 8000, in modo che i valori dell'array rientrino nei loro indici

Dimmi tu...

FileSize

Restituisce la dimensione del file in byte.

Tipo

Dimensione in byte

Valore minimo positivo

Valore massimo

Analogico in C++

float

4

1.175494351e-38

3.402823466e+38

float

doppio

8

2.2250738585072014e-308

1.7976931348623158e+308

doppio


dimensione del file in byte, la dimensione occupata dal tipo double in byte, ed è necessario dividerla per zhzhezhezhezhezhezhezhez



 
Alexey Viktorov:

Dimmi tu...

Tipo

Dimensione in byte

Valore minimo positivo

Valore massimo

Analogico in C++

float

4

1.175494351e-38

3.402823466e+38

float

doppio

8

2.2250738585072014e-308

1.7976931348623158e+308

doppio


dimensione del file in byte, la dimensione occupata dal tipo double in byte, ed è obbligatorio dividere per zhzhezhezhezhezhezhezhezhezhez



Che cos'è zzzzzzzz? I conti non tornano, amico, non puoi semplificare le cose?
 
Top2n:
Cos'è un zzzzzzzz? I conti non tornano, non puoi prendertela comoda?
Per favore, usa il tuo cervello solo un po'. Posso solo consigliarvi, non farlo per voi. Quali sono i tuoi dati, qual è la dimensione dell'array... Non voglio ricordare tutto questo e condurvi alla vittoria.
 

Получается, что если массив динамический, то формула /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);//записываем в файл все элементы массива

 


Il codice della linea che completa il file bin con una nuova barra

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);//записываем в файл все элементы массива

 


Il codice della linea che completa il file bin con una nuova barra

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;
        }


Non ricordo dove l'ho letto, ma se si apre un file solo per scrivere, tutto quello che c'è dentro viene cancellato.

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

Il file deve essere aperto per la lettura e la scrittura

int handle = FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
Se apriamo il file solo per la lettura, allora il flag di scrittura può essere specificato e anche meglio non esserlo.
 
Alexey Viktorov:

Non ricordo dove l'ho letto, ma se un file viene aperto solo per la scrittura, tutto quello che c'è dentro viene cancellato.

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

Il file deve essere aperto per la lettura e la scrittura

int handle = FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
Se apriamo il file solo per la lettura, allora il flag di scrittura può essere specificato e anche meglio non esserlo.
Perdonami, ma ho già risolto)) il problema era anche uno di questi)) Da frugare ))))
 

Pensavo che fosse tutto qui.

Se scrivo nuovi dati all'inizio, scrive all'inizio completo, c'è un modo per aumentare la dimensione dell'inizio))

Voglio dire, si limita a scrivere all'inizio o continua a salvare solo fino alla fine?

FileSeek(handle,0,SEEK_SET);

E se salvo fino alla fine, e continuo ad aggiungere fino alla fine, come faccio a leggere dalla fine alla quantità giusta? O meglio, come catturare dal file bin il chunk giusto daN alla fine?

O l'ho fatto con i comandi sbagliati?

Salvo due matrici alla fine - come ho capito aumentando correttamente il peso del bidone.

Poi provo a trasferire i dati all'array con il compito di catturare l'ultimo record, il file bin è più grande dell'array.

  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);  что делает  - определяет положение массива или в бине?
 

Se leggo la sezione richiesta dal file binario con

FileReadArray(file_handle,arr,0,WHOLE_ARRAY);

L'algoritmo elabora l'array stesso, le celle mancanti sono tradotte in modo simile alla posizione nel contenitore, che a sua volta dà l'intervallo richiesto nel limite della stessa posizione del contenitore, solo con degli zeri.

 
Top2n:

Se leggo la sezione richiesta dal file binario con

FileReadArray(file_handle,arr,0,WHOLE_ARRAY);

L'algoritmo elabora l'array stesso, le celle mancanti sono tradotte in modo simile alla posizione binaria, che a sua volta dà l'intervallo richiesto nel limite della stessa posizione come nel binario, solo con zeri.

Non capisco cosa può andare storto...

Basta aprire il file per la lettura.

handle = FileOpen(path, FILE_READ|FILE_BIN);

sposta il puntatore al giusto numero di byte nella giusta direzione

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

32 byte sono 8 valori interi o 4 valori in virgola mobile.

Se l'array è bidimensionale, questo significa che ci spostiamo di 4 righe se l'array è di tipo int, o di 2 righe se l'array è di tipo double

Poi, leggiamo i valori nell'array dichiarato in precedenza come dinamico arr[][2]; questo è un array bidimensionale.

FileReadArray(handle, arr);

ECCO!!!

Successivamente, determinare la dimensione dell'array

int size = ArrayRange(arr, 0);

e poi stampare i valori.

int i, z;

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

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

Non capisco cosa possa andare storto...

Grazie a te! Ha funzionato)))