![]() |
|
|
|
|
#1
|
|||
|
|||
|
Здравствуйте! Я пыталась написать программку для этого: есть текстовый документ1( в нем есть слово1, слово2,слово3), надо посчитать количество всех документов, где встречается слово1, количество документов где встречается слово2 и так по каждому слову.
Но из-за недостатка знаний ничего не выходит ..Помогите пожалуйста!!!! ![]() ![]() |
|
#2
|
||||
|
||||
|
Ну, сначала надо написать ф-юпоиска файлов (если надо искать во вложенныхпапках, то тогда - рексрсивную).
Вот пример рекурсивной функции поиска файлов: Код:
procedure TMain.Recurse(sPathToPack: String);
var
SearchRec: TSearchRec;
Result: Integer;
PathInicial: String;
msFile: TMemoryStream;
begin
PathInicial := ExcludeTrailingPathDelimiter(sPathToPack);
Result := FindFirst(PathInicial + '\*.*', faAnyFile, SearchRec);
while Result = 0 do
begin
if not (SearchRec.Name = '.') and not (SearchRec.Name = '..') then
{ если каталог... }
if SearchRec.Attr and faDirectory > 0 then
{ рекурсивно обрабатываем... }
Recurse(PathInicial + '\' + SearchRec.Name)
else
begin
try
msFile := TMemoryStream.Create;
msFile.LoadFromFile(PathInicial + '\' + SearchRec.Name);
if msFile.Size > 0 then
begin
Inc(iFileNum);
ssFiles.Add(PathInicial + '\' + SearchRec.Name);
Application.ProcessMessages;
end;
msFile.Free;
except
end;
end;
Application.ProcessMessages;
Result := FindNext(SearchRec);
end;
end;iFileNum - счетчик найденных файлов \*.* - тип файлов (если файлытекстовые - тогда надо будет поставить \*.txt) ssFiles- массив типа TStrings Затем нужно прочесть все найденный файлы (можно в цикле) for... И при чтении разделять строки на файлы путем их разбиения на блоки, если учесть, что они разделены пробелом. А вообще, может у тебя уже есть наработки? Мы бы их подкорректировали, если не работают... |
|
#3
|
|||
|
|||
|
файлы я умею находить и даже их считывать, а вот как мне дальше делать (имеенно как посчитать количество документов среди документов д1,д2, д3, д4.в которых каждое слово из документа д5 встречается хотя бы один раз .)
![]() |
|
#4
|
||||
|
||||
|
Код:
const
DocCount = 4; //Количество обрабатываемых документов
var
Counter:integer;
WordList:TStringList; //Список слов
CurrentDoc:TStringList; //обрабатываемый документ
i,j:integer;
begin
WordList:=TStringList.Create;
CurrentDoc:=TStringList.Create;
WordList.LoadFromFile(...); //Загрузка файла со словами для поиска
for i:=0 to WordList.Count-1 do
begin
Counter:=0;
for j:=1 to DocCount do
begin
CurrentDoc.LoadFromFile(...); //Загрузили документ в котором будем искать
if Pos(WordList[i],CurrentDoc.Text)>0 then inc(Counter)
end;
ShowMessage('Слово "'+WordList[i]+'" встречается в '+IntToStr(Counter)+' документах');
end;
WordList.Free;
CurrentDoc.Free;
end;типа того ![]() Кста, файл со словами для поска должен содержать по одному слову в каждой строке. Если это не так, то нужно его распарсить. |
|
#5
|
|||
|
|||
|
:d :d :d Спасибо большое! Все работает :d :d :d
|