|
#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... И при чтении разделять строки на файлы путем их разбиения на блоки, если учесть, что они разделены пробелом. А вообще, может у тебя уже есть наработки? Мы бы их подкорректировали, если не работают... THE CRACKER IS OUT THERE |
#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
|