Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.09;
Скачать: CL | DM;

Вниз

работа с текстовым файлом   Найти похожие ветки 

 
pathfinder   (2005-09-01 20:43) [0]

Подскажите пожалуйста, как читать и записывать символы в текстовом файле из определеных позиций?


 
Kerk ©   (2005-09-01 20:45) [1]

Seek


 
Fay ©   (2005-09-01 20:46) [2]

SetFilePointer


 
pathfinder   (2005-09-01 21:27) [3]

что я делаю неправильно?
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;


 
Anatoly Podgoretsky ©   (2005-09-01 21:38) [4]

что я делаю неправильно?
Ты пытаешься использовать seek для текстовых файлов, это потоковое устройство только в одном направлении и последлвательно или с самого начала или с конца, если режим append.


 
pathfinder   (2005-09-01 21:41) [5]

а чем пользоваться в текстовом файле для установки курсора на нужную позицию?


 
Anatoly Podgoretsky ©   (2005-09-01 22:02) [6]

Не использовать текстовые файлы, а использовать или АПИ или VCL, но тогда работу со строками будешь сам обесчечивать ручками по полной программе.


 
pathfinder   (2005-09-02 10:30) [7]

В АПИ это SetFilePointer? Покажите пожалуйста пример ее использования. Не могу разобраться с параметрами:(


 
pathfinder   (2005-09-02 11:02) [8]

понял свою ошибку)
открываю файл не как текстовый. только вот в выходной файл записывается символ "B" хотя должны быть цифры.. В чем тут дело?


 
pathfinder   (2005-09-02 11:03) [9]

вот мой код:
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.


 
begin...end ©   (2005-09-02 13:26) [10]

> pathfinder   (02.09.05 11:02) [8]
> pathfinder   (02.09.05 11:03) [9]

В выходной файл записывается содержимое переменной v2, которой до этого Вы никакое значение не присваиваете.


 
pathfinder   (2005-09-02 13:44) [11]


> begin...end ©

Спасибо вам. Вроде вещь очевидная, а сам не заметил по невнимательности:(


 
pathfinder   (2005-09-02 17:32) [12]

Возникла новая дилемма. Как установить указатель на следущую строку с помощью seek или еще как-нибудь? Помогите!:)


 
begin...end ©   (2005-09-02 18:05) [13]

> pathfinder   (02.09.05 17:32) [12]

> Как установить указатель на следущую строку с помощью seek
> или еще как-нибудь?

Читать файл до тех пор, пока не встретится конец строки: cLF, cCR + cLF, cCR + cEOF или cEOF. Читать лучше, конечно, не по одному байту, а в буфер побольше. Вы, по сути дела, хотите реализовать свой ReadLn, поэтому может помочь код процедуры System._ReadLn. Правда, он на ассемблере.


 
Digitman ©   (2005-09-02 18:18) [14]

а еще лучше, если файл сравнительно невелик, воспользоваться удобным "посредником" - классом TStringList - и не зарабатывать себе геморрой, ибо он вряд ли оправдывает достижение цели.


 
pathfinder   (2005-09-02 18:31) [15]


> Читать файл до тех пор, пока не встретится конец строки:
> cLF, cCR + cLF, cCR + cEOF или cEOF.

а как проверять прочитанный байт на наличие кода конца строки?
> Вы, по сути дела, хотите реализовать свой ReadLn, поэтому
> может помочь код процедуры System._ReadLn. Правда, он на
> ассемблере.

ну да..с ассемблером только к сожалению не дружу..((


> а еще лучше, если файл сравнительно невелик, воспользоваться
> удобным "посредником" - классом TStringList - и не зарабатывать
> себе геморрой, ибо он вряд ли оправдывает достижение цели.

TStringlist тут не актуален, так как необходимо заменять символы в определенных позициях строки, а не целиком строки. Да пожалуй оправдывает, потому что сейчас приходится производить корректировку файла вручную. А строк в файле бывает больше 1000..


 
begin...end ©   (2005-09-02 18:35) [16]

> pathfinder   (02.09.05 18:31) [15]

> TStringlist тут не актуален, так как необходимо заменять
> символы в определенных позициях строки, а не целиком строки.

TStringList позволяет заменять символы в определённых позициях строк.


 
pathfinder   (2005-09-02 18:39) [17]


> begin...end ©



> TStringList позволяет заменять символы в определённых позициях
> строк.


КАК???


 
begin...end ©   (2005-09-02 18:49) [18]

> 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:55) [19]


> begin...end ©

СПАСИБО!



Страницы: 1 вся ветка

Текущий архив: 2005.10.09;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.026 c
3-1123867184
Silver...
2005-08-12 21:19
2005.10.09
CrossTable + Редактирование


14-1126818913
Ego
2005-09-16 01:15
2005.10.09
Зигзица


14-1126934091
guesst
2005-09-17 09:14
2005.10.09
fastreport


2-1125124870
Intelligent[neo]
2005-08-27 10:41
2005.10.09
Фотографии из БД через Delphi


10-1105536866
John Magic
2005-01-12 16:34
2005.10.09
настройка Word овского параграфа из Delphi