|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Помогите с алгоритмом...
Напишите пожалуйста алгоритм проверки строки в файле, желательно методом TFileStream.
Вот как я записываю(из Delphi World) Код:
procedure FileReplaceString(const FileName, searchstring, replacestring: string); var fs: TFileStream; S: string; begin fs := TFileStream.Create(FileName, fmOpenread or fmShareDenyNone); try SetLength(S, fs.Size); fs.ReadBuffer(S[1], fs.Size); finally fs.Free; end; S := StringReplace(S, SearchString, replaceString, [rfReplaceAll, rfIgnoreCase]); fs := TFileStream.Create(FileName, fmCreate); try fs.WriteBuffer(S[1], Length(S)); finally fs.Free; end; end; |
#2
|
||||
|
||||
Посмотри здесь: http://www.delphisources.ru/pages/faq/file_system.html
аздел Файлы (в конце раздела (Чтения файлов))! Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#3
|
||||
|
||||
Это я читал в Delphi World, но вроде там нет ничего для проверки строки
|
#4
|
||||
|
||||
Ну как же!???
Читаешь строку а потом проверяшь ее на соответствие нужной тебе строке. Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
#5
|
||||
|
||||
Приведи пожалуйста код, а то значит я что-то не туда смотрел.
|
#6
|
|||
|
|||
Да че тут париться. TFileStream какие - то придумали.
Код:
function StrExists(FileName,FindStr:string):boolean; var Str:string; begin AssignFile(input,FileName); Reset(input); while not eof(input) do begin Readln(str); if Pos(FindStr,Str)>0 then begin Result:=true; CloseFile(input); exit; end; end; CloseFile(input); Result:=false; end; |
#7
|
||||
|
||||
Спасибо, будет время попробую
|
#8
|
||||
|
||||
Помогите....
А как можно сделать, чтобы этот код работал быстрее, а то около 300 файлов по 60 вариантов в каждом файле нужно проверить, а работает очень медленно............
Помогите как сделать быстрее ? Даже в 1 файле по 60 проверок не знаю сколько будет длиться, т.к. идет до сих пор.... Последний раз редактировалось Oleg, 16.01.2008 в 16:21. |
#9
|
||||
|
||||
Можно так:
Код:
procedure FindStringInFile(const FileName, searchstring: string); var fs: TFileStream; S: string; begin fs := TFileStream.Create(FileName, fmOpenread or fmShareDenyNone); try SetLength(S, fs.Size); fs.ReadBuffer(S[1], fs.Size); finally fs.Free; end; if Pos(searchstring,S) > 0 then ShowMessage('Есть!') else ShowMessage('Нет...'); end; PS: Работает быстро, проверял: поиск строки в файле 23 Мб занял < 1 сек Велик и могуч наш Object Pascal ! ICQ: 357-591-887 Последний раз редактировалось Rokuell, 16.01.2008 в 16:57. |
#10
|
|||
|
|||
Не знаю как ты используешь мою функцию , у меня 26 мб обрабатывается за 0,566 сек
|
#11
|
||||
|
||||
Вот:
Вот как использую:
Код:
for i:=0 to scrG.Count-1 do // число файлов for j:=0 to 60 do begin // для каждого файла проверка и если есть, то cmd:='test_'+IntToStr(j); // заносим в ListBox if StrExists(Edit2.Text+'/'+scrG.Items[i],cmd) = true then nav.Items.Add(cmd); Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей |
#12
|
|||
|
|||
Естественно! Так любой поиск 2 дня работать будет. Ты со своим циклом j многомегабайтный файл 60 раз будешь открывать, вместо этого используй массив.
|
#13
|
||||
|
||||
>ART
Работает медленно, т.к у тебя в алгоритме идёт построчное считывание и => функция Pos вызывается столько раз, сколько строк в файле! В данном случае читать файл надо одной строкой и искать лишь один раз вызвав Pos Велик и могуч наш Object Pascal ! ICQ: 357-591-887 |
#14
|
||||
|
||||
>Oleg
А кокого размера у тебя файлы? Велик и могуч наш Object Pascal ! ICQ: 357-591-887 Последний раз редактировалось Rokuell, 16.01.2008 в 18:00. |
#15
|
||||
|
||||
Цитата:
Размер от 2kb - 200 kb Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей Последний раз редактировалось Oleg, 16.01.2008 в 18:07. |