Fail
6 отговора
176 прегледа
Re: Fail
Прочети го в низ - например чрез LoadFromFile на TStringList, и ползвай pos ()
чети и дишай по-леко
чети и дишай по-леко
Re: Fail
Обаче какъвто и проблем да има Pechenia го решава със StringList :) Къде отидоха добрите стари AssignFile & Co. ? :)
Иначе по-подробно:
зареждаш в един тСтрингЛист файла с LoadFromFile метода, после в цикъл подобен на
-
Отново едит на темата: Обаче идеята не е най-добрата, защото ако търсим стринг 'абв где', а той във файла е
'абв
где'
с този подход няма да го намерим.
-------------
Special killer double trouble triple extra nicotine monster!
Иначе по-подробно:
зареждаш в един тСтрингЛист файла с LoadFromFile метода, после в цикъл подобен на
var
sl: TStringList;
...
sl := TStringList.Create;
sl.LoadFromFile(FILE_NAME);
for i := 0 to sl.Count - 1 do begin
if Pos(S {tvoqstring}, sl[ i ]) <> 0 then begin
{ obrabotka na namereniq string }
end;
end;
-
Отново едит на темата: Обаче идеята не е най-добрата, защото ако търсим стринг 'абв где', а той във файла е
'абв
где'
с този подход няма да го намерим.
-------------
Special killer double trouble triple extra nicotine monster!
Редактирано от z_free на
Re: Fail
Abe i az taka si pomislix ama ne mislia,parvo pisha sled mislia.Moiata ideia
var F:textfile;
var S:String;
begin
reset(F);
while not eof(F) do
begin
readln(F,S);
if Pos(niz,S)>0 then {neshto si...}
end;
close(F);
var F:textfile;
var S:String;
begin
reset(F);
while not eof(F) do
begin
readln(F,S);
if Pos(niz,S)>0 then {neshto si...}
end;
close(F);
Редактирах си мнението
Отново едит на темата: Обаче идеята не е най-добрата, защото ако търсим стринг 'абв где', а той във файла е
'абв
где'
с този подход няма да го намерим.
-------------
Special killer double trouble triple extra nicotine monster!
'абв
где'
с този подход няма да го намерим.
-------------
Special killer double trouble triple extra nicotine monster!
Re: Fail
Функция за такова нещо няма - и никога няма да има в Delphi.
Погледнах другите мнения - и ми стана интересно колко време ще се чака зареждането на 400 MB файл примерно - та после да започне търсенето в него. Слава Богу обаче задачката не е такава
.
А това което съм дал е нещо като алгоритъм за големи файлове - ако не искаш да ползваш stream. Разбира се не си предпазен от горния проблем - във файла да имаш нов ред - а ти в низа да се опиташ да го смениш с интервал - то и това си има начин да го оправиш ама е доста играчка.
Ползвай буфер в който да си четеш парче от файла - като буфера трябва да се по-голям от дължината на търсения текст - най добре няколко пъти поне за да се оптимизира четенето от файла.
За първия пас - четеш целия буфер и търсиш в него, за всеки следващ - изместваш буфера така че в него да останат последните Х символа - където Х е дължинтата на низа който търсиш - и прочиташ парче което да се събере в остатъка на буфер. Разбира се този метод далеч не е най-добрия - но другите са по-сложни за реализация.
---
Е т'ва е живот!
Погледнах другите мнения - и ми стана интересно колко време ще се чака зареждането на 400 MB файл примерно - та после да започне търсенето в него. Слава Богу обаче задачката не е такава
А това което съм дал е нещо като алгоритъм за големи файлове - ако не искаш да ползваш stream. Разбира се не си предпазен от горния проблем - във файла да имаш нов ред - а ти в низа да се опиташ да го смениш с интервал - то и това си има начин да го оправиш ама е доста играчка.
Ползвай буфер в който да си четеш парче от файла - като буфера трябва да се по-голям от дължината на търсения текст - най добре няколко пъти поне за да се оптимизира четенето от файла.
За първия пас - четеш целия буфер и търсиш в него, за всеки следващ - изместваш буфера така че в него да останат последните Х символа - където Х е дължинтата на низа който търсиш - и прочиташ парче което да се събере в остатъка на буфер. Разбира се този метод далеч не е най-добрия - но другите са по-сложни за реализация.
---
Е т'ва е живот!
Редактирано от PhantomAS на
Re: Fail
Печения е мързел, и следва основната концепция за Delphi - повече мисъл, по-малко код.
Относно твоята реализация аз съм критично настроен, щото StringList-а има свойство Text, където е целия текст и е достатъчен един pos:
Това решава въпроса със средни по-размер файлове. За тлъсти файлове основна роля играе бързодействието, тогава има много врътки, които при желание мога да развия тук. Но в 98% от случаите мързела е достатъчен.
чети и дишай по-леко
Относно твоята реализация аз съм критично настроен, щото StringList-а има свойство Text, където е целия текст и е достатъчен един pos:
with TStringList.Create do
try
LoadFromFile ('aaa');
if pos ('tursenoto',Text) then ...
finally
Free;
end;
Това решава въпроса със средни по-размер файлове. За тлъсти файлове основна роля играе бързодействието, тогава има много врътки, които при желание мога да развия тук. Но в 98% от случаите мързела е достатъчен.
чети и дишай по-леко