Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
как бы я делал...
Поставил бы указатель в конец файла. Дальше нашел бы конец предыдущей строки. (2-ой) Это либо /n ли,о /r либо = 0 (кажеться так? ) нашел бы конец строки 3 -ой с конца и сдвинул бы на указатель на 1 символ вперед. ВСе !
Удалил часть текста в своем пред. посте. Подумал, что надо иметь более подробную инфу о задаче. Скажем, в рамках одно программы MQL описанная ТС конструкция выглядит совершенно бессмысленной. Наверное задача какая-то другая.)
У клиента есть индикатор и советник. Индикатор печатает свой файл построчно. Советник печатает тоже какую-то белиберду в свой файл после каждой сделки построчно. Т.е. имеем 2 файла .csv.
Задача: После того как советник открыл сделку и записал свои данные в СВОЙ файл, надо прочитать последние 2 строки из файла индикатора и эти данные снова дописать в файл советника напротив своих данных. Вот так вот. Кому-то бессмысленно, кому-то нет.
как бы я делал...
Поставил бы указатель в конец файла. Дальше нашел бы конец предыдущей строки. (2-ой) Это либо /n ли,о /r либо = 0 (кажеться так? ) нашел бы конец строки 3 -ой с конца и сдвинул бы на указатель на 1 символ вперед. ВСе !
Я решил упростить задачу. Сейчас в индкатор добавил код, который печатает отдельный файл с нужными мне значениями в нужном мне порядке. Вот и все!
А то уже голова кругом от этих байтов-шмайтов.
У клиента есть индикатор и советник. Индикатор печатает свой файл построчно. Советник печатает тоже какую-то белиберду в свой файл после каждой сделки построчно. Т.е. имеем 2 файла .csv.
Задача: После того как советник открыл сделку и записал свои данные в СВОЙ файл, надо прочитать последние 2 строки из файла индикатора и эти данные снова дописать в файл советника напротив своих данных. Вот так вот. Кому-то бессмысленно, кому-то нет.
А индикатор вообще не общается с советником? Только через файлы?
А если общается, так советник и так все реал-тайм знает, он же не от фонаря сделки лепит, чего ему в файлы индикатора лезть? - пиши себе в файл данные индикатора.
А индикатор вообще не общается с советником? Только через файлы?
А если общается, так советник и так все знает, он же не от фонаря сделки лепит, чего ему в файлы индикатора лезть?
Общается файлами. 1500 строк кода в советнике. Желания разгребать чужой код не имеется. Ищем легкие пути)
Общается файлами. 1500 строк кода в советнике. Желания разгребать чужой код не имеется. Ищем легкие пути)
))
Вообще, по хорошему, задачка явно для SQL БД. Я в свое время так и делал - все данные асинхронно сваливал в таблицы, а прога уже оттуда их читала. Не уговариваю, явно не тот случай.)
Объявляем 2 строковые переменные S и SPred (раз Вам надо последнюю и предпоследнюю - две). Полагаем S="". Читаем файл с его начала построчно в S до конца файла. Перед каждым чтением заносим содержимое S в SPred. Когда чтение закончится, в SPred будет находиться предпоследняя, в S последняя строка. Возможно, надо отдельно обслужить случаи, когда всего строк было меньше 2 и меньше одной.
Или Вам требуются не сами строки, а смещения их начала в файле?
А вот это уже интересно! Спасибо за наводку
У клиента есть индикатор и советник. Индикатор печатает свой файл построчно. Советник печатает тоже какую-то белиберду в свой файл после каждой сделки построчно. Т.е. имеем 2 файла .csv.
Задача: После того как советник открыл сделку и записал свои данные в СВОЙ файл, надо прочитать последние 2 строки из файла индикатора и эти данные снова дописать в файл советника напротив своих данных. Вот так вот. Кому-то бессмысленно, кому-то нет.
Еще вариант для случая файлов сколь угодно большого размера.
Держим в советнике файл, который дописывается индикатором, постоянно открытым на чтение (не на запись) как бинарный. Каждые 16 мс в советнике смотрим, изменилась ли его длина. Если изменилась - значит, что-то добавилось. Считываем добавленное (а это должны быть две последние добавленные строки) в буфер в памяти, начиная со смещения, равного последнему перед добавлением размеру файла, и разбиваем на строки. Какой разделитель, не помню, или два байта 0D 0A (13 10) или один из них. Буфер в памяти - массив байтов размером не меньше двух максимальных длин строк плюс 4.
Текстовый файл, насколько помню, нельзя открыть только на чтение. Если ошибаюсь, проще - держать постоянным открытым файл от индикатора как текстовый, добавленное считывать не в байтовый буфер, а сразу в две строки.