Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 6. - página 1119

 
Top2n:
como resultado, dividi por 8000, para que os valores da matriz se encaixem em seus índices

Você me diz...

FileSize

Retorna o tamanho do arquivo em bytes.

Tipo

Tamanho em bytes

Valor mínimo positivo

Valor máximo

Analógico em C++

flutuador

4

1.175494351e-38

3.402823466e+38

flutuador

duplo

8

2.2250738585072014e-308

1.7976931348623158e+308

duplo


tamanho do arquivo em bytes, o tamanho ocupado por tipo duplo em bytes, e é necessário dividi-lo por zhzhezhezhezhezhezhezhezhezhezhez



 
Alexey Viktorov:

Você me diz...

Tipo

Tamanho em bytes

Valor mínimo positivo

Valor máximo

Analógico em C++

flutuador

4

1.175494351e-38

3.402823466e+38

flutuador

duplo

8

2.2250738585072014e-308

1.7976931348623158e+308

duplo


tamanho do arquivo em bytes, o tamanho ocupado por tipo duplo em bytes, e é obrigatório dividir por zhzhezhezhezhezhezhezhezhezhezhezhezhezhezhezhez



O que é zzzzzzzz? Não faz sentido, cara, você não pode facilitar as coisas?
 
Top2n:
O que é zzzzzzzz? Não faz sentido, você não pode ir com calma?
Por favor, use seu cérebro apenas um pouco. Eu só posso aconselhá-lo, não fazê-lo por você. Quais são seus dados, qual é a dimensão da matriz... Não quero me lembrar de tudo isso e levá-lo à vitória.
 

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

 


O código da linha que complementa o arquivo de lixo com uma nova 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);//записываем в файл все элементы массива

 


O código da linha que complementa o arquivo de lixo com uma nova 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;
        }


Não me lembro onde o li, mas se você abrir um arquivo apenas para escrever, tudo nele será deletado.

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

O arquivo tem que ser aberto para leitura e escrita

int handle = FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
Se abrirmos o arquivo apenas para leitura, então a bandeira de gravação pode e melhor ainda não ser especificada.
 
Alexey Viktorov:

Não consigo me lembrar onde o li, mas se um arquivo é aberto apenas para escrita, tudo nele é deletado.

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

O arquivo tem que ser aberto para leitura e escrita

int handle = FileOpen(path, FILE_READ|FILE_WRITE|FILE_BIN);
Se abrirmos o arquivo apenas para leitura, então a bandeira de gravação pode e melhor ainda não ser especificada.
Perdoe-me, mas eu já resolvi))) o problema também era um destes)) Ao folhear))))
 

Eu pensei que era isso.

Eu escrevo novos dados até o início, ele escreve até o início completo, existe alguma maneira de aumentar o tamanho do início))

Quero dizer, é limitado escrever até o início ? ou continuar economizando apenas até o fim ?

FileSeek(handle,0,SEEK_SET);

E se eu poupar até o fim, e continuar a acrescentar até o fim, como ler do fim para a quantidade certa ? Ou melhor, como capturar do arquivo de lixo o pedaço certo de N até o fim?

Ou eu o fiz com os comandos errados?!?!?

Guardo duas matrizes para o fim - como entendo, aumentando corretamente o peso do lixo.

Então eu tento transferir dados para a matriz com a tarefa de capturar o último registro, a caixa de arquivo é maior que a matriz.

  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 eu ler a seção necessária do arquivo binário com

FileReadArray(file_handle,arr,0,WHOLE_ARRAY);

O algoritmo processa a matriz em si, as células ausentes são traduzidas de forma semelhante à posição no silo, o que, por sua vez, dá a faixa solicitada no limite da mesma posição como no silo, apenas com zeros.

 
Top2n:

Se eu ler a seção necessária do arquivo binário com

FileReadArray(file_handle,arr,0,WHOLE_ARRAY);

O algoritmo processa a matriz em si, as células ausentes são traduzidas de forma semelhante à posição binária, o que, por sua vez, dá a faixa solicitada no limite da mesma posição como no binário, apenas com zeros.

Eu não entendo o que pode dar errado...

Basta abrir o arquivo para leitura.

handle = FileOpen(path, FILE_READ|FILE_BIN);

deslocar o ponteiro para o número certo de bytes na direção certa

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

32 bytes é 8 valores inteiros ou 4 valores de ponto flutuante.

Se a matriz for bidimensional, isto significa que mudamos por 4 linhas se a matriz for do tipo int, ou por 2 linhas se a matriz for do tipo duplo

Em seguida, lemos os valores no array declarado anteriormente como um arr[] dinâmico[2]; este é um array bidimensional.

FileReadArray(handle, arr);

É ISTO!!!

A seguir, determine o tamanho da matriz

int size = ArrayRange(arr, 0);

e depois imprimir os 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:

Eu não entendo o que pode dar errado...

Obrigado, você! Funcionou))))