Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как удалить в текстовом файле разрыв страницы !? [D6, WinXP]


Alex77777 ©   (2005-06-05 15:33:00) 

Здравствуйте!

Как удалить в текстовом файле разрыв страницы !?
С примером желательно.

Спасибо


ferr   (2005-06-06 14:07:00) [1]

Для больших файлов string не очень пригодно. Вот, на досуге написал код побайтового сравнения + алг. Боуера и Мура. Если вы воспользуетесь этим кодом, то его надо проверять.
procedure DeleteInFile(const _FileName:string;_Str:string);
const
 Frame=65536;
var
 F1,F2: TFileStream;
 a: array[0..Frame-1] of Byte;
 b: array[0..Frame-1] of Byte;
 FSize,i,j,C,k,l,La,Pa,Pb: integer;
 Table:Array[Byte]of Byte;
 OK:LongBOOL;
begin
 l:=Length(_Str);
 for i:=0 to 255 do
   Table[i]:=l;
 for i:=1 to l-1 do
   Table[Byte(_Str[i])]:=l-i;
 F1:=TFileStream.Create(_FileName,fmOpenRead);
 F2:=TFileStream.Create(_FileName+'~',fmCreate);
 try
   FSize:=F1.Size;
   C:=0;
   if FSize>Frame then
   begin
     FSize:=FSize - Frame;
     C:=1;
     C:=C + FSize div (Frame-l+1);
     La:=FSize mod (Frame-l+1);
     FSize:=La;
     if La<>0 then C:=C+1;
   end else
   begin
     C:=1;
     La:=FSize;
   end;
   for j:=1 to C do
   begin
     if c<>1 then
     begin
       if j<>c then
       begin
         La:=Frame-l;
       end else
       La:=FSize;
     end else
     if C>1 then La:=Frame-l;
   F1.Read(a[0],La);
   Pb:=0;
   Pa:=0;
   i:=l-1;
   while i<La-1 do
   begin
     if Byte(_Str[l])<>a[i] then
       inc(i, Table[Byte(a[i])]) else
     begin
       k:=0;
       OK:=True;
       while (k<l-1)and OK do
       begin
         Inc(k);
         if a[i-k]<>Byte(_Str[l-k]) then OK:=False;
       end;
       if not OK then inc(i,Table[Byte(_Str[l-k])]) else
       begin
         System.Move(a[Pa],b[Pb],i+1-l-Pa);
         Pb:=Pb+i+1-Pa-l;
         Pa:=i+1;
         inc(i,l);
       end;
     end;
   end;
     System.Move(a[Pa],b[Pb],La-Pa);
     inc(Pb,La-Pa);
     F2.Write(b[0],Pb)
   end;
 finally
   F1.Free;
   F2.Free;
 end;
end;

P.S. Попробуйте ещё усложнить? :)


Anatoly Podgoretsky   (2005-06-05 21:40:00) [2]

ferr ©   (05.06.05 21:32) [6]
А не важно, может быть и так
текст
текст<разрыв>текст
текст


ferr   (2005-06-05 21:32:00) [3]

Прям так и написано или просто пропущено место?


YurikGL   (2005-06-05 20:05:00) [4]


> Alex77777 ©   (05.06.05 19:55) [4]

Находишь pos-м подстроки "--разрыв страницы--" и с помощью delete их удаляешь...


Alex77777   (2005-06-05 19:55:00) [5]

Вот пример если что то он даст :))

текст
текст
текст

--разрыв страницы--

текст
текст
текст

--разрыв страницы--

и т.д.

Вот такой файл


Alex77777   (2005-06-05 19:55:00) [6]

Удалено модератором


Anatoly Podgoretsky   (2005-06-05 17:51:00) [7]

Palladin ©   (05.06.05 17:47) [1]
Это как раз не проблема, стандартный разделитель страницы. А вок как он работает с файлом неизвестно. Если например загоняет в единую строку то ReplaceStr


Palladin   (2005-06-05 17:47:00) [8]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо