Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизКак удалить в текстовом файле разрыв страницы !? Найти похожие ветки
← →
Alex77777 © (2005-06-05 15:33) [0]Здравствуйте!
Как удалить в текстовом файле разрыв страницы !?
С примером желательно.
Спасибо
← →
Palladin © (2005-06-05 17:47) [1]Дашь четкое определение разрыва страницы в текстовом файле я награжу тебя примером.
← →
Anatoly Podgoretsky © (2005-06-05 17:51) [2]Palladin © (05.06.05 17:47) [1]
Это как раз не проблема, стандартный разделитель страницы. А вок как он работает с файлом неизвестно. Если например загоняет в единую строку то ReplaceStr
← →
Alex77777 © (2005-06-05 19:55) [3]Вот пример если что то он даст :))
текст
текст
текст
--разрыв страницы--
текст
текст
текст
--разрыв страницы--
и т.д.
Вот такой файл
← →
Alex77777 © (2005-06-05 19:55) [4]Удалено модератором
← →
YurikGL © (2005-06-05 20:05) [5]
> Alex77777 © (05.06.05 19:55) [4]
Находишь pos-м подстроки "--разрыв страницы--" и с помощью delete их удаляешь...
← →
ferr © (2005-06-05 21:32) [6]Прям так и написано или просто пропущено место?
← →
Anatoly Podgoretsky © (2005-06-05 21:40) [7]ferr © (05.06.05 21:32) [6]
А не важно, может быть и так
текст
текст<разрыв>текст
текст
← →
ferr © (2005-06-06 14:07) [8]Для больших файлов 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. Попробуйте ещё усложнить? :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c