Немного не так. Вот скрипт, который сначала пишет в файл 100 элементов типа int, а затем пытается в массив типа int размером 30 элементов прочитать из этого же файла 200 элементов (которых там нет, конечно).
//+------------------------------------------------------------------+ //| CheckFileReadArray.mq4 | //| Copyright © 2008, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" //+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- int array[100]; // 100 * 4 = 400 байт for (int i = 0; i < ArraySize(array); i++) array[i] = i ; int handle=FileOpen("mydata.dat", FILE_BIN|FILE_WRITE); if(handle>0) { FileWriteArray(handle, array, 0, 100); // writing last 7 elements FileClose(handle); } Print("Приготовимся считывать"); Sleep(10000); //пауза 10 секунд int other[30]; ArrayInitialize(other,0); handle=FileOpen("mydata.dat", FILE_BIN|FILE_READ); if(handle>0) { int readen = FileReadArray(handle, other, 0, 200); FileClose(handle); } Print("readen = ", readen); for (i = 0; i<ArraySize(other);i++) Print("index = ", i, " value = ", other[i]); //---- return(0); } //+------------------------------------------------------------------+
В итоге размер принимающего массива становится равным 200, но прочитано реально из файла только 100 элементов.
Спасибо. Действительно, реальные строки хоть и подсчитываются, но возвращается размер массива. В ближайшем билде будет исправление.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот обнаружил ещё одну проблемку. Функция FileReadArray() согласно описанию "возвращает количество фактически прочитанных элементов".
Но у меня она почему-то возвращает размер исходного массива. Вот например такой код:
Файл "test.txt" может быть либо пустым, либо содержать несколько строк, но в итоге почему-то получаем count==1000, т.е. размер массива. Но столько элементов не могло прочитаться из файла, поскольку там нет такого количества строк (а в первом случае файл вообще был пустой)