Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.017 c
2-1125386126
Max4
2005-08-30 11:15
2005.10.09
Запуск приложения из программы


3-1125374821
Ярослав
2005-08-30 08:07
2005.10.09
Как получить id всех соединений с БД в текущий момент


1-1127034318
Alexis
2005-09-18 13:05
2005.10.09
Парсинг алгебраических выражений (полиномов)


1-1126706465
Mefodiy
2005-09-14 18:01
2005.10.09
Поиск слов в Word из Delphi


1-1126775624
keal
2005-09-15 13:13
2005.10.09
Компилятор кода Delphi в прогу под Unix





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский