Как определить нимер строки в файле .txt

 

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

Никак не могу в поиске ничего себе подобрать. Если есть добрые люди откликнитесь. Примой функции к данному действию нет.

Заранее Спасибо.

 
Читать файл построчно и считать строки.
 
Dmitry Fedoseev:
Читать файл построчно и считать строки.
Ты имееш ввиду прописать перебором чтение файла по строчьно со щётом?
 
Yevheniy Kopanitskyy:
Ты имееш ввиду прописать перебором чтение файла по строчьно со щётом?

Да.

 
Dmitry Fedoseev:

Да.

А есть какое-то готовое решение?
 

Это будет эффективно когда в файле десяток строк. А когда десяток тысяч???

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

 
Yevheniy Kopanitskyy:
А есть какое-то готовое решение?

Здесь ничего такого особенного. Открыть файл для чтения, как текстовый, дальше читаешь. Одно считывание одна строка.

Про свою задачу подробней расскажите.

 
#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 строк


 
прочитать весь файл, найти нужную строку (комбинацию букв), и посчитать знаки "возврат каретки" с начала файла до этой строки
 
Taras Slobodyanik:
и посчитать знаки "возврат каретки" с начала файла до этой строки

мой пример и считает это, нужно лишь разорвать цикл while(!FIn.IsEnding()) в нужном месте, но с учетом что требуемая строка уже была прочитана, т.е минус 1 строк нужно прочитать


совет Выше передвигать файловый указатель будет работать если записать, а затем прочитать структуры - т.е. одинаковые по размеру данные, со строками быстрее читать построчно, не хочу тестить, но думаю даже 1 Гб текста скрипт прочтет за 3-5 сек

 
Igor Makanu:

мой пример и считает это, нужно лишь разорвать цикл while(!FIn.IsEnding()) в нужном месте, но с учетом что требуемая строка уже была прочитана, т.е минус 1 строк нужно прочитать

я имею в виду, что читать/писать построчно может быть очень долго, и можно читать/писать сразу Весь файл, и потом работать с ним в памяти не дёргая хдд/сдд

Причина обращения: