Читать файл построчно и считать строки.
Ты имееш ввиду прописать перебором чтение файла по строчьно со щётом?
Да.
Да.
Это будет эффективно когда в файле десяток строк. А когда десяток тысяч???
Если файл готовится так-же из mql, то может есть смысл подогнать размер строки под определённую длину? Тогда можно будет двигать указатель на определённое количество строк, хоть от конца файла, хоть от начала.
А есть какое-то готовое решение?
Здесь ничего такого особенного. Открыть файл для чтения, как текстовый, дальше читаешь. Одно считывание одна строка.
Про свою задачу подробней расскажите.
#property copyright "Copyright 2019, IgorM" #property link "https://www.mql5.com/ru/users/igorm" #property version "1.00" #property strict input string FileName="tst.csv"; #include <Files\FileTxt.mqh> //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { // Запись файла string s="1;2;3;4;5;6;7;8;9"; CFileTxt *FOut=new CFileTxt(); FOut.Open(FileName,FILE_WRITE|FILE_TXT); for(int i=0; i<100; i++) { if(i<99) FOut.WriteString(s+"\n"); else FOut.WriteString(s); } FOut.Close(); delete FOut; // Чтение файла CFileTxt *FIn=new CFileTxt(); FIn.Open(FileName,FILE_READ|FILE_TXT); int count=0; while(!FIn.IsEnding()) { s=FIn.ReadString(); count++; } printf("Прочитал %d строк",count); FIn.Close(); delete FIn; } //+------------------------------------------------------------------+
результат:
2019.05.31 21:10:15.247 tst_file EURUSD,H1: Прочитал 100 строк
мой пример и считает это, нужно лишь разорвать цикл while(!FIn.IsEnding()) в нужном месте, но с учетом что требуемая строка уже была прочитана, т.е минус 1 строк нужно прочитать
совет Выше передвигать файловый указатель будет работать если записать, а затем прочитать структуры - т.е. одинаковые по размеру данные, со строками быстрее читать построчно, не хочу тестить, но думаю даже 1 Гб текста скрипт прочтет за 3-5 сек
мой пример и считает это, нужно лишь разорвать цикл while(!FIn.IsEnding()) в нужном месте, но с учетом что требуемая строка уже была прочитана, т.е минус 1 строк нужно прочитать
я имею в виду, что читать/писать построчно может быть очень долго, и можно читать/писать сразу Весь файл, и потом работать с ним в памяти не дёргая хдд/сдд
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет, хочу определить номер строки в файле для дальнейшей работы с указателем.
Никак не могу в поиске ничего себе подобрать. Если есть добрые люди откликнитесь. Примой функции к данному действию нет.
Заранее Спасибо.