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 1118

 
  FileReadArray(file_handle,arr);

Por favor, informe sobre possíveis desenvolvimentos.

Eu tenho array[100], também salvei arquivo binário com tamanho [1000], como devolver array de arquivo binário com os últimos 100 valores. Existe algo universal? Estou trabalhando nisto novamente há 12 horas e nada.

 
Top2n:
  FileReadArray(file_handle,arr);

Por favor, informe sobre possíveis desenvolvimentos.

Eu tenho array[100], também salvei arquivo binário com tamanho [1000], como devolver array de arquivo binário com os últimos 100 valores. Existe algo universal? Estou trabalhando nisto há 12 horas e nada.

Se me lembro corretamente, foi escrito em mql4, que se contar = WHOLE_ARRAY ou valor excede o número de elementos da matriz, então a matriz inteira é escrita até o fim. E não disse nada sobre nenhuma margem. Isto é, está fora de questão, para não mencionar 1.000.

Para verificá-lo, conte quantos valores estão escritos e o tamanho do arquivo.

 
Alexey Viktorov:

Se bem me lembro, foi escrito em mql4, que se contar = WHOLE_ARRAY ou valor excede o número de elementos da matriz, toda a matriz é escrita até o fim. E não disse nada sobre nenhuma margem. Portanto, pode estar absolutamente fora de questão se não houver uma margem de 1.000 mil pontos.

Para verificar isso, calcular quantos valores são escritos e o tamanho do arquivo resultante.

Não quero dizer que após escrever o array no binário, novos dados aparecem, e continuo escrevendo-os no binário através de um novo array dimensionado (= a dimensão da coluna do array primário), cada vez até o final do arquivo, para uma nova coluna j

então precisamos remover os dados do binário igual em número ao índice da matriz original, que foi transferido para o binário na primeira integração. Entretanto, os últimos dados serão incluídos nesta matriz limitada, pois o binário é maior do que a matriz primária, já que foram acrescentadas as linhas secundárias. As linhas secundárias devem ir para a matriz de leitura, e as primeiras linhas em binário devem estar fora da área.

 
Top2n:

Não quero dizer que após escrever o array para o binário, novos dados aparecem após um momento, que continuo a escrever para o binário através de um novo array dimensionado (= dimensão da coluna do array primário), cada vez no final do arquivo, para uma nova coluna j

então precisamos remover os dados do binário igual em número ao índice da matriz original, que foi transferido para o binário na primeira integração. Entretanto, os últimos dados devem ser removidos de tal forma que os últimos dados sejam incluídos nesta matriz limitada, pois o binário é maior que a matriz primária devido à adição de fileiras secundárias.

Então, não é necessário atribuir uma dimensão à matriz antes da leitura. Se não forem os primeiros dados necessários, então é necessário calcular o tamanho em bytes e deslocar a posição inicial para a leitura pela quantidade certa.
 
Alexey Viktorov:
Então você não precisa atribuir um tamanho à matriz antes de ler. Se não forem os primeiros dados necessários, então calcule o tamanho em bytes e mude a posição inicial para a leitura pela quantidade certa.

Essa é a questão de como calcular os bytes

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

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

Esta é a questão de como calcular os bytes

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

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

Se os dados forem do tipo duplo, então divida o tamanho do arquivo pelo número de bytes ocupados pelo número do tipo duplo, ou seja, por 8.

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

Se os dados forem o dobro, então divida o tamanho do arquivo pelo número de bytes ocupados pelo número duplo, ou seja, por 8.

É porFileFindFirst?

ou apenas escanear cada nova linha em bytes

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

FileReadArray(file_handle,arr,file_size,WHOLE_ARRAY);
errado
 
Top2n:
ComFileFindFirst?
Você tem o nome do arquivo e sua alça.
 
Top2n:

Através deFileFindFirst?

Ou apenas bysummarize cada nova linha em bytes

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

FileReadArray(file_handle,arr,file_size,WHOLE_ARRAY);
não está certo.

Você não deveria ter corrigido seu posto depois de respondê-lo.

Errado. Antes de ler um array, defina seu tamanho file_size = FileSize(handle); e divida por memória ocupada por tipo de dado, ou seja, para o dobro por 8. Você obtém o número de números no arquivo. Se a matriz for bidimensional, então o número de registros no arquivo será duas vezes menor. E você obtém quantos bytes devem ser deslocados para ler a partir da linha desejada.

 
Alexey Viktorov:

Você deveria ter corrigido seu posto após responder a ele

Errado. Antes de ler um array, defina seu tamanho file_size = FileSize(handle); e divida por memória ocupada por tipo de dado, ou seja, para o dobro por 8. Você obtém o número de números no arquivo. Se a matriz for bidimensional, então o número de registros no arquivo será duas vezes menor. E você obtém quantos bytes devem ser deslocados para ler a partir da linha desejada.

Acabei dividindo por 8000 para que os valores da matriz coubessem em seus índices.