Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Вниз

Поиск в текстовом файле.   Найти похожие ветки 

 
iNew   (2003-07-21 04:24) [0]

Дан текстовый файл, длина каждой строки в котором 80 символов.
Необходимо найти определенный набор символов(слово) в этом файле.
Если слово находится целиком в строке то нет проблем, а если начало слова в конце i-ой строки, а конец в начале i+1, причем никаких знаков переноса (типа ’-’ ) нет.
Самый простой вариант загнать в цикле весь файл в строку и с ней работать, но как-то уж слишком медленно получается.
Есть ли ещё варианты?


 
Babay   (2003-07-21 05:20) [1]

Наверное это тебе подойдет

Var sl:TStringList;
i:Integer;

begin
sl:=TStringList.create;
sl.loadFromFile("MyFile.txt");
i:=Pos("slovo",sl.text);// слово начинается с символа № i
.....
извлекаешь слово ежели надо
.....

sl.free
end;


 
Babay   (2003-07-21 06:14) [2]

Sorry невнимательно вопрос прочел.
Вот такой код на моей машине PIII - 660 256Mb самое дольше выполнялся 100 ms размер файла 1.32 Мб Искомое слово засунул в конец файла на разные строки

Var s:String;
i:Integer;
d:TDateTime;
h,m,sk,ms:Word;
sl:TStringList;
begin
d:=Now;
sl:=TStringList.Create;
sl.LoadFromFile("d:\pr.txt");
For i:=0 to sl.Count-1 do begin
s:=S+sl.Strings[i];
end;
Caption:=Inttostr(Pos("Slovo",s));
d:=Now-d;
DecodeTime(d,h,m,sk,ms);
Caption:=Caption+" "+Inttostr(m)+":"+Inttostr(sk)+":"+Inttostr(ms);
sl.Free;
end;


 
VMcL   (2003-07-21 09:21) [3]

>Babay © (21.07.03 05:20)

var
sl: TStringList;
i: Integer;
S: String;
begin
sl := TStringList.create;
try
sl.loadFromFile("MyFile.txt");
S := sl.Text;
finally
sl.free;
end;

i:=Pos("slovo",sl.text);// слово начинается с символа № i
//.....
//извлекаешь слово, ежели надо
//.....
end;


 
VMcL   (2003-07-21 09:33) [4]

>VMcL © (21.07.03 09:21)

Sorry.

i:=Pos("slovo", S);// слово начинается с символа № i


P. S.

А такой способ будет, наверное, ещё быстрее:

var
Stream: TStream;
I, Size: Integer;
S: string;
begin
Stream := TFileStream.Create("MyFile.txt", fmOpenRead or fmShareDenyWrite);
try
Size := Stream.Size - Stream.Position;
SetString(S, nil, Size);
Stream.Read(Pointer(S)^, Size);
finally
Stream.Free;
end;

I := Pos("slovo", S); // слово начинается с символа № i
//.....
//извлекаешь слово, ежели надо
//.....
end;


 
iNew   (2003-07-21 09:34) [5]

Дело в том, что в исходном файле есть определенные блоки, и если этот блок удовлетворяет опр. параметрам то я его записываю в File1, а в File2 всё что осталось. И если использовать
S := sl.Text, то почему-то в File1 и File2 эти блоки имеют не туже структуру, что в исходном файле (80 символов в строке), это важно. А если использовать
For i:=0 to sl.Count-1 do begin
s:=S+sl.Strings[i];
end;
То всё нормально.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
3-10112
jenya_d1
2003-07-11 14:37
2003.08.04
Вопрос MS SQL 2000 - создание автогенерируемого идентификатора


11-10149
savva
2002-11-29 12:02
2003.08.04
Я тут совершенно недавно подсел на KOL и MCK...


4-10502
acsoft
2003-06-01 15:37
2003.08.04
Как сделать треугольное окно с углами в точках, например [0,0],[5


1-10206
MTS
2003-07-23 11:47
2003.08.04
F1Book


4-10491
dimonf
2003-05-30 19:54
2003.08.04
Как запретить одновременный запуск нескольких копий окна???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский