Доступ к строкам в файле .txt

Доброе утро! Подскажите пожалуйста, как получить строку из файла .txt по номеру этой строки. Я сделал через невидимый Memo, а мне нужно напрямуюFrom Stilet: Почему язык не указываем?Извините забыл Пишу на Delphi
9 ответов

Вот один вариант:
program rf;
uses crt;
var
 n,i:integer;
 f:text;
 s:string;
begin
 clrscr;
 write('vvedite file => ');{ввод имени файла}
 readln(s);
 assign(f,s);
 reset(f);
 write('vvedite N stroki => '); {ввод номера строки}
 readln(n);
 for i:=1 to n do readln(f,s);
 close(f);
 if s='' then writeln('takoi stroki v file net!') {если строки нет}
 else writeln('stroka ',n,': ',s); {если строка есть - вывод}
 readkey;
end.
На скорую руку, по желанию можно что подредактировать


Очень удобно через TStringList;
var ST:TStringList;
 S:String;
 n:integer;
begin
 ST:=TStringList.Create;
 ST.LoadFromFile('путь к файлу');
 n:=ST.Count;// узнаём кол-во строк в файле
 S:=ST[9];//переменной S присваиваем значение десятой строки файла т.к отсчёт идёт с нуля
 ST.Free;
end;


Спасибо, через StringList намного удобнее, чем через Memo, значит напрямую к этим строкам нельзя все таки обращаться, не используя дополнительных компанентов?


значит напрямую к этим строкам нельзя все таки обращаться, не используя дополнительных компанентов?
Как так, на прямую? Компоненты тут можно и не использовать. Открывайте файл, читайте его по строкам до тех пор, пока до нужной не дойдёте.


значит напрямую к этим строкам нельзя все таки обращаться, не используя дополнительных компанентов?
TStringList это класс а не компонент


Спасибо за пояснение, а подскажите еще вот что: в данной процедуре нужно получить m:=n/2; при компиляции выводится сообщение о несовместимости типов n Extended и m Integer как получтить m?procedure TForm2.Button2Click(Sender: TObject); var s:string; n:integer; m:integer; begin s:=Memo1.Text; n:=Length(s); m:=n/2;


m - integer т.е цeлое число. Для дробных есть типы single, ****** и некоторые другие. Также существует функция round которая округляет чисто до целых:
m:=round(n/2);


это то понятно, но мне потом нужно использовать m для цикла for


Для цикла for подходят только целые значения. Как округлять дробь я показал.