Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1119

 
Top2n:
como resultado, he dividido por 8000, para que los valores de la matriz encajen en sus índices

Dígame usted...

FileSize

Devuelve el tamaño del archivo en bytes.

Tipo

Tamaño en bytes

Valor mínimo positivo

Valor máximo

Analógico en C++

float

4

1.175494351e-38

3.402823466e+38

float

doble

8

2.2250738585072014e-308

1.7976931348623158e+308

doble


tamaño del archivo en bytes, el tamaño ocupado por el tipo doble en bytes, y es necesario dividirlo por zhzhezhezhezhezhez



 
Alexey Viktorov:

Dígame usted...

Tipo

Tamaño en bytes

Valor mínimo positivo

Valor máximo

Analógico en C++

float

4

1.175494351e-38

3.402823466e+38

float

doble

8

2.2250738585072014e-308

1.7976931348623158e+308

doble


tamaño del archivo en bytes, el tamaño ocupado por el tipo doble en bytes, y es obligatorio dividir por zhzhezhezhezhezhezhez



¿Qué es zzzzzz? No tiene sentido, hombre, ¿no puedes hacerlo más fácil?
 
Top2n:
¿Qué es zzzzzz? No tiene sentido, ¿no puedes tomártelo con calma?
Por favor, usa tu cerebro sólo un poco. Sólo puedo aconsejarte, no hacerlo por ti. Cuáles son tus datos, cuál es la dimensión del array... No quiero recordar todo eso y llevarte a la victoria.
 

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

 


El código de la línea que complementa el archivo bin con una nueva 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);//записываем в файл все элементы массива

 


El código de la línea que complementa el archivo bin con una nueva 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;
        }


No recuerdo dónde lo leí, pero si abres un archivo sólo para escribir, se borra todo lo que contiene.

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

El archivo tiene que ser abierto para leer y escribir

int handle = FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
Si abrimos el archivo sólo para lectura, entonces la bandera de escritura puede e incluso es mejor no especificarla.
 
Alexey Viktorov:

No recuerdo dónde lo leí, pero si un archivo sólo se abre para escribir, se borra todo lo que contiene.

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

El archivo tiene que ser abierto para leer y escribir

int handle = FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
Si abrimos el archivo sólo para lectura, entonces la bandera de escritura puede e incluso es mejor no especificarla.
Perdóname, pero ya he resuelto)) el problema era uno de estos también)) Por hurgar en ))))
 

Creí que eso era todo.

Si escribo nuevos datos al principio, se escribe al principio completo, ¿hay alguna forma de aumentar el tamaño del principio))

Quiero decir, ¿se limita a escribir hasta el principio? o sigue guardando hasta el final solamente?

FileSeek(handle,0,SEEK_SET);

Y si guardo hasta el final, y sigo añadiendo hasta el final, ¿cómo leo desde el final hasta la cantidad correcta? O más bien, ¿cómo capturar del archivo bin el trozo correcto desdeN hasta el final?

¿O lo hice con los comandos equivocados?

Guardo dos matrices para el final - como entiendo por el aumento del peso de la papelera correctamente.

Entonces intento transferir los datos al array con la tarea de capturar el último registro, la bandeja del archivo es más grande que el 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);  что делает  - определяет положение массива или в бине?
 

Si leo la sección requerida del archivo binario con

FileReadArray(file_handle,arr,0,WHOLE_ARRAY);

El algoritmo procesa el propio array, las celdas que faltan se traducen de forma similar a la posición en el bin, que a su vez da el rango solicitado en el límite de la misma posición que en el bin, sólo que con ceros.

 
Top2n:

Si leo la sección requerida del archivo binario con

FileReadArray(file_handle,arr,0,WHOLE_ARRAY);

El algoritmo procesa la propia matriz, las celdas que faltan se traducen de forma similar a la posición binaria, que a su vez da el rango solicitado en el límite de la misma posición que en el binario, sólo con ceros.

No entiendo qué puede salir mal...

Sólo tienes que abrir el archivo para leerlo.

handle = FileOpen(path, FILE_READ|FILE_BIN);

desplazar el puntero al número de bytes correcto en la dirección correcta

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

32 bytes son 8 valores enteros o 4 valores de coma flotante.

Si el array es bidimensional, esto significa que nos desplazamos 4 líneas si el array es de tipo int, o 2 líneas si el array es de tipo double

A continuación, leemos los valores en el array declarado de antemano como un arr[][2] dinámico; se trata de un array bidimensional.

FileReadArray(handle, arr);

¡¡¡ESO ES!!!

A continuación, determine el tamaño de la matriz

int size = ArrayRange(arr, 0);

y luego imprimir los valores.

int i, z;

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

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

No entiendo qué puede salir mal...

¡Gracias, tú! Funcionó))