![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
работа с текстовым файлом [D6, Win2k]
pathfinder © (2005-09-01 20:43:00)Подскажите пожалуйста, как читать и записывать символы в текстовом файле из определеных позиций?
pathfinder (2005-09-02 18:55:00) [1]
> begin...end ©
СПАСИБО!
begin...end (2005-09-02 18:49:00) [2]> pathfinder (02.09.05 18:39) [17]
В примере ниже первый символ третьей строки заменяется на 'A':
var
S: string;
begin
with TStringList.Create do
try
LoadFromFile('C:\MyFile.txt');
if Count >= 3 then
begin
S := Strings[2];
if Length(S) > 0 then
begin
S[1] := 'A';
SaveToFile('C:\MyFile.txt')
end
end
finally
Free
end
end.
pathfinder (2005-09-02 18:39:00) [3]
> begin...end ©
> TStringList позволяет заменять символы в определённых позициях
> строк.
КАК???
begin...end (2005-09-02 18:35:00) [4]> pathfinder (02.09.05 18:31) [15]
> TStringlist тут не актуален, так как необходимо заменять
> символы в определенных позициях строки, а не целиком строки.
TStringList позволяет заменять символы в определённых позициях строк.
pathfinder (2005-09-02 18:31:00) [5]
> Читать файл до тех пор, пока не встретится конец строки:
> cLF, cCR + cLF, cCR + cEOF или cEOF.
а как проверять прочитанный байт на наличие кода конца строки?
> Вы, по сути дела, хотите реализовать свой ReadLn, поэтому
> может помочь код процедуры System._ReadLn. Правда, он на
> ассемблере.
ну да..с ассемблером только к сожалению не дружу..((
> а еще лучше, если файл сравнительно невелик, воспользоваться
> удобным "посредником" - классом TStringList - и не зарабатывать
> себе геморрой, ибо он вряд ли оправдывает достижение цели.
TStringlist тут не актуален, так как необходимо заменять символы в определенных позициях строки, а не целиком строки. Да пожалуй оправдывает, потому что сейчас приходится производить корректировку файла вручную. А строк в файле бывает больше 1000..
Digitman (2005-09-02 18:18:00) [6]а еще лучше, если файл сравнительно невелик, воспользоваться удобным "посредником" - классом TStringList - и не зарабатывать себе геморрой, ибо он вряд ли оправдывает достижение цели.
begin...end (2005-09-02 18:05:00) [7]> pathfinder (02.09.05 17:32) [12]
> Как установить указатель на следущую строку с помощью seek
> или еще как-нибудь?
Читать файл до тех пор, пока не встретится конец строки: cLF, cCR + cLF, cCR + cEOF или cEOF. Читать лучше, конечно, не по одному байту, а в буфер побольше. Вы, по сути дела, хотите реализовать свой ReadLn, поэтому может помочь код процедуры System._ReadLn. Правда, он на ассемблере.
pathfinder (2005-09-02 17:32:00) [8]Возникла новая дилемма. Как установить указатель на следущую строку с помощью seek или еще как-нибудь? Помогите!:)
pathfinder (2005-09-02 13:44:00) [9]
> begin...end ©
Спасибо вам. Вроде вещь очевидная, а сам не заметил по невнимательности:(
begin...end (2005-09-02 13:26:00) [10]> pathfinder (02.09.05 11:02) [8]
> pathfinder (02.09.05 11:03) [9]
В выходной файл записывается содержимое переменной v2, которой до этого Вы никакое значение не присваиваете.
pathfinder (2005-09-02 11:03:00) [11]вот мой код:
rocedure TForm1.Button1Click(Sender: TObject);
var f1, f2:file of byte;
v1, v2:byte;
begin
if opendialog1.Execute then
assignfile(f1, opendialog1.FileName);
reset(f1);
assignfile(f2, 'out.111');
rewrite(f2);
seek(f1, 5);
read(f1, v1);
write(f2, v2);
end;
end.
pathfinder (2005-09-02 11:02:00) [12]понял свою ошибку)
открываю файл не как текстовый. только вот в выходной файл записывается символ 'B' хотя должны быть цифры.. В чем тут дело?
pathfinder (2005-09-02 10:30:00) [13]В АПИ это SetFilePointer? Покажите пожалуйста пример ее использования. Не могу разобраться с параметрами:(
Anatoly Podgoretsky (2005-09-01 22:02:00) [14]Не использовать текстовые файлы, а использовать или АПИ или VCL, но тогда работу со строками будешь сам обесчечивать ручками по полной программе.
pathfinder (2005-09-01 21:41:00) [15]а чем пользоваться в текстовом файле для установки курсора на нужную позицию?
Anatoly Podgoretsky (2005-09-01 21:38:00) [16]что я делаю неправильно?
Ты пытаешься использовать seek для текстовых файлов, это потоковое устройство только в одном направлении и последлвательно или с самого начала или с конца, если режим append.
pathfinder (2005-09-01 21:27:00) [17]что я делаю неправильно?
procedure TForm1.Button1Click(Sender: TObject);
var f1, f2: textfile;
ch: char;
begin
if opendialog1.Execute then
begin
AssignFile(f1, OpenDialog1.FileName);
Reset(f1);
assignfile(f2, 'out.txt');
rewrite(f2);
seek(f1, 19);
read(f1, ch);
write(f2, ch);
end;
end;
Fay (2005-09-01 20:46:00) [18]SetFilePointer
Kerk (2005-09-01 20:45:00) [19]Seek