Текстовые файлы, Нужна помощь с алгоритмом |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Текстовые файлы, Нужна помощь с алгоритмом |
Rudolf |
17.05.2006 8:16
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 51 Пол: Мужской Реальное имя: Владимир Репутация: 0 |
Задача:''Дан текстовый файл 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. |
Malice |
17.05.2006 9:24
Сообщение
#2
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
Нужно сохранять предыдущий считанный символ в отдельной переменной, и если текущий ="b", то записать его в файл.
repeat правда, символ 'b' может оказаться первым, эту ситуацию тоже можно предусмотреть. |
Rudolf |
17.05.2006 9:58
Сообщение
#3
|
Пионер Группа: Пользователи Сообщений: 51 Пол: Мужской Реальное имя: Владимир Репутация: 0 |
Malice спасибо тебе...А если мы будем читать не символы а строки т.е.
Код 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 readln(f,s); for i:=1 to length(s) do begin if (s[i]='b') and (i<>1) then write(g,s[i-1]); end; end; CloseFile(f); CloseFile(g); end; Так можно??? |
volvo |
17.05.2006 11:32
Сообщение
#4
|
Гость |
Rudolf,
а если файл будет таким: Цитата(Пример) aaaabaa<Enter> ?baaaaacb Выделенному символу не предшествует 'a' или символ переноса строки? Если "нет", то твое решение подойдет, а если "да", то ты уже потеряешь некоторые символы... |
Rudolf |
17.05.2006 19:28
Сообщение
#5
|
Пионер Группа: Пользователи Сообщений: 51 Пол: Мужской Реальное имя: Владимир Репутация: 0 |
А можете подсказать какие условия надо наложить чтобы избежать потери символов??Я попробовал но не совсем работает...
Код 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; |
volvo |
17.05.2006 19:47
Сообщение
#6
|
Гость |
procedure TForm1.Button2Click(Sender: TObject); Пойдет? |
Rudolf |
17.05.2006 20:02
Сообщение
#7
|
Пионер Группа: Пользователи Сообщений: 51 Пол: Мужской Реальное имя: Владимир Репутация: 0 |
Да, пойдет Спасибо большое...но только наверное понадобится еще одно условие в случае когда у нас подряд идет два 'b'... ну это я еще посмотрю..Спасибо еще раз.
|
volvo |
17.05.2006 20:08
Сообщение
#8
|
Гость |
Цитата(Rudolf @ 17.05.2006 20:02) только наверное понадобится еще одно условие в случае когда у нас подряд идет два 'b'... Никаких дополнительных условий не понадобится... Все, что нужно уже есть... Теперь любая комбинация должна обрабатываться. Двойной 'b' я проверял, кстати ... |
Rudolf |
17.05.2006 20:26
Сообщение
#9
|
Пионер Группа: Пользователи Сообщений: 51 Пол: Мужской Реальное имя: Владимир Репутация: 0 |
Тогда еще бо'льшее СПАСИБО
|
мисс_граффити |
20.05.2006 16:56
Сообщение
#10
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
Задача:''Дан текстовый файл f. Записать в файл g с сохоанением порядка следования те символы файла f которым в этом файле предшествует буква b ''. обратите внимание: не которые предшествуют b, а которым. то есть для комбинации abc это будет с. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Malice |
20.05.2006 17:43
Сообщение
#11
|
Профи Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: 20 |
|
Текстовая версия | 27.04.2024 16:30 |