Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1118

 
  FileReadArray(file_handle,arr);

Подскажите пожалуйста возможные развития. 

Есть массив[100], также сохранен бинарный фаил размером [1000], как возвратить массив бинарного файла последние 100 значений. Универсально что нибудь есть? ТО опять 12 часов проковырялся и ничего.

 
Top2n:
  FileReadArray(file_handle,arr);

Подскажите пожалуйста возможные развития. 

Есть массив[100], также сохранен бинарный фаил размером [1000], как возвратить массив бинарного файла последние 100 значений. Универсально что нибудь есть? ТО опять 12 часов проковырялся и ничего.

Если я правильно помню, то в mql4 было написано, что если count = WHOLE_ARRAY или значение превышающее количество элементов массива то записывается весь массив до конца. И не о каком запасе не говорилось. То-есть не о какой 1000 речи и быть не может.

Проверить можно так: Посчитать сколько каких значений записывается и какого размера получается файл.

 
Alexey Viktorov:

Если я правильно помню, то в mql4 было написано, что если count = WHOLE_ARRAY или значение превышающее количество элементов массива то записывается весь массив до конца. И не о каком запасе не говорилось. То-есть не о какой 1000 речи и быть не может.

Проверить можно так: Посчитать сколько каких значений записывается и какого размера получается файл.

не я о том, что после записи массива в бинар, появляется через момент времени, новые данные, их я продолжаю записывать в бинар через новый одомерный массив(= размерности столбца первичного массива), каждый раз в конец файла, по новому j столбцу

далее появляется необходимость снять с бинара данные равные по количеству индекса исходного массива, онный был перенесен в бинар в первой интерации. Но снимаем таким образом чтоб последние данные попали в этот ограниченный массив, так как бинар больше первичного массива, из за добавления вторичных строк. Вторичные строки должны попасть в считываемый массив, а первые строки в бинаре должны оказаться в не зоны

 
Top2n:

не я о том, что после записи массива в бинар, появляется через момент времени, новые данные, их я продолжаю записывать в бинар через новый одомерный массив(= размерности столбца первичного массива), каждый раз в конец файла, по новому j столбцу

далее появляется необходимость снять с бинара данные равные по количеству индекса исходного массива, онный был перенесен в бинар в первой интерации. Но снимаем таким образом чтоб последние данные попали в этот ограниченный массив, так как бинар больше первичного массива, из за добавления вторичных строк.

Тогда не надо назначать размерность массива перед чтением. Если-же нужны не первые данные, то надо вычислять размер в байтах и сдвигать на нужное количество стартовую позицию для чтения.
 
Alexey Viktorov:
Тогда не надо назначать размерность массива перед чтением. Если-же нужны не первые данные, то надо вычислять размер в байтах и сдвигать на нужное количество стартовую позицию для чтения.

Вот то и вопрос как  рассчитать байты

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

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

Вот то и вопрос как  рассчитать байты

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

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

Если данные типа double то раздели размер файла на количество занимаемых байт числом типа double то-есть на 8

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

Если данные типа double то раздели размер файла на количество занимаемых байт числом типа double то-есть на 8

Через FileFindFirst?

или просто проссумировать каждую новую строчку в байтах 

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

FileReadArray(file_handle,arr,file_size,WHOLE_ARRAY);
не то что то
 
Top2n:
Через FileFindFirst?
Так у тебя-же есть имя файла и его хендл.
 
Top2n:

Через FileFindFirst?

или просто проссумировать каждую новую строчку в байтах 

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

FileReadArray(file_handle,arr,file_size,WHOLE_ARRAY);
не то что то

Зря ты правишь свой пост после ответа на него...

Не так. Перед чтением массива определяешь его размер file_size = FileSize(handle); и делишь на занимаемую память типом данных, то-есть для double на 8. Получаешь количество чисел в файле. Если массив двухмерный, то соответственно записей в файле ровно в 2 раза меньше. И получаешь на сколько байт надо сместиться для чтения с нужной строки.

 
Alexey Viktorov:

Зря ты правишь свой пост после ответа на него...

Не так. Перед чтением массива определяешь его размер file_size = FileSize(handle); и делишь на занимаемую память типом данных, то-есть для double на 8. Получаешь количество чисел в файле. Если массив двухмерный, то соответственно записей в файле ровно в 2 раза меньше. И получаешь на сколько байт надо сместиться для чтения с нужной строки.

в итоге я поделил на 8000 чтоб значения массива встали в свои индексы
Причина обращения: