Или можно сделать, чтобы файловый указатель перемещался в начало предыдущей строки?
//+------------------------------------------------------------------+ //| запись содержимого файла в массив строк array[] | //| в случае неудачи вернем false | //+------------------------------------------------------------------+ bool ReadFileToArray(string &array[],string FileName) { bool res=false; int FileHandle; string tempArray[64000],currString; int stringCounter; int devider='\x90'; //---- FileHandle=FileOpen(FileName,FILE_READ,devider); if (FileHandle!=-1) { while(!FileIsEnding(FileHandle)) { currString=FileReadString(FileHandle); tempArray[stringCounter]=currString; stringCounter++; } if (stringCounter>0) { ArrayResize(array,stringCounter); for (int i=0;i<stringCounter;i++) array[i]=tempArray[i]; res=true; } } //---- return(res); }
Она принимает массив array по ссылке и имя файла. В результате будет сформирован массив , содержащий строки текстового файла. В качестве разделителя выбран экзотический спецсимвол
'\x90';, но не могу дать гарантии, что такой символ никогда не встретится в каком-нибудь текстовом файле.
Пример вызова:
//+------------------------------------------------------------------+ //| script program start function | //+------------------------------------------------------------------+ int start() { //---- string InitialStringArray[]; // сюда считаем файл //---- if (!ReadFileToArray(InitialStringArray,FileName)) { Alert("Данных для обработки нет"); return; } return(0); } //+------------------------------------------------------------------+
Отличная работа. Не прошло и суток ;-).
В массиве можно гонять строки, как вперёд, так и назад.
С разделителями у меня проблем не возникнет (формат типа Excel).
Для меня единственный недостаток в том, что файл, всё же, придётся
читать полностью (файл не маленький, занимает время). Было бы
более приемлемо читать файл от конца. В моём случае нужные данные
находятся в последних строках.
Ну, как говорится: "На безрыбье и рак - рыба".
Ещё раз, спасибо.
Конечно нужна) перед return
Вот и я подумал, что у автора по выходу из функции скорее всего продолжается работа с файлом, и он где-то в другом месте кода закрывается. А сюда просто забыл запостить ФайлКлоуз().
Пол-года назад тут парень обращался с проблемой - у него в коде открывалось на каждом тике по копии одного и того же файла. Затем достигался предел и код выдадвал ошибку. Теперь понятно откуда берутся такого типа промахи - видать он просто этот участок кода откуда-то срисовал.
Rosh, исправьте пожалуйста (а то опять может кто-то напутать код, а потом недоумевать, почему он не работает).
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Нужна функция возвращающая файловый указатель на заданное количество строк.
Заранее спасибо.