![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Rudolf |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 51 Пол: Мужской Реальное имя: Владимир Репутация: ![]() ![]() ![]() |
Задача:''Дан текстовый файл f. Записать в файл g с сохоанением порядка следования те символы файла f которым в этом файле предшествует буква b ''. Алгоритм нормальный придумать немогу.Ведь для текстовых файлов не действует процедура SEEK..Написал только для одной буквы.
Код unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Memo2: TMemo; Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} var f,g:textfile; i,j,k:integer; ch:char; procedure TForm1.Button1Click(Sender: TObject); begin memo1.Lines.SaveToFile('c:\f.txt'); end; procedure TForm1.Button3Click(Sender: TObject); begin memo2.Lines.LoadFromFile('c:\g.txt'); end; procedure TForm1.Button2Click(Sender: TObject); begin k:=0; AssignFile(f,'c:\f.txt'); AssignFile(g,'c:\g.txt'); reset(f); rewrite(g); While not EOF(f) do begin read(f,ch); inc(k); if ch='b' then begin reset(f); while i<>k do begin inc(i); read(f,ch); if i=k-1 then write(g,ch); end; end; end; CloseFile(f); CloseFile(g); end; end. |
![]() ![]() |
Rudolf |
![]()
Сообщение
#2
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 51 Пол: Мужской Реальное имя: Владимир Репутация: ![]() ![]() ![]() |
А можете подсказать какие условия надо наложить чтобы избежать потери символов??Я попробовал но не совсем работает...
Код procedure TForm1.Button2Click(Sender: TObject); begin k:=0; AssignFile(f,'c:\f.txt'); AssignFile(g,'c:\g.txt'); reset(f); rewrite(g); While not EOF(f) do begin inc(k); readln(f,s); for i:=1 to length(s) do begin if i=length(s) then ch:=s[i]; if (s[i]='b') and (k<>1) and (i=1) then write(g,ch); if (s[i]='b') and (i<>1) then write(g,s[i-1]); end; end; CloseFile(f); CloseFile(g); end; |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 8:41 |