Вот образец алгоритма разбора. Он не занимается точно тем, что вам надо, а демонстрирует принцип. В коментариях я указал примерно что нужно сделать в той или иной ситуации. Надеюсь поможет. Рекомендую еще защитить код конструкциями try except. Примечания:
1. при чтении из потока позиция меняется автоматически
2. рекомендуются делать это в нити либо добавить (Application.ProcessMessage), чтобы пррилдожение не подвисало на больших текстах.
3. Никогда не выводить инфу в контролы так как это сделано здесь. Ибо очень сильное подение производительности из-за постоянной перерисовки. Если контрол не умеет выключаться на время обновления (BeginUpdate, EndUpdate), то лучше использовать промежуточный объект в памяти, например TStringList, а потом из него уже все готовые данные вывести на жкран пользователю.
procedure TForm1.Button2Click(Sender: TObject);
var
f1: TFileStream;
CurLine: Integer;
CurChar: AnsiChar;
begin
f1 := TFileStream.Create('C:\22.txt', fmOpenRead, fmShareDenyNone);
f1.Position := 0;
Memo1.Clear;
CurLine := 0;
CurChar := 'z';
while f1.Position <> f1.Size do
begin
f1.ReadBuffer(CurChar, 1);
case CurChar of
'A' .. 'Z', 'a' .. 'z', 'А' .. 'я', 'ё', '0' .. '9':
begin
//что делать если встретили букву или цифру, в вашем случае можно поставить флаг что читается слово и записать букву в переменную, в которой у вас это слово
Memo1.Lines[CurLine] := Memo1.Lines[CurLine] + CurChar;
end;
'!', '?', '.': //знаки показывающие конец предложения, можно добавить например ;
begin
//что делать если окончилось предложение. В вашем случае сбрасываем флаг что читаем слово, создаем новую переменную для следующего слова (в зависимости от того как там у вас будут они сохраняться) , увеличиваем счетчик слов на единицу и счетчик предложений на единицу. Можно тут еще учесть наличие многоточий и других подряд идущих знаков (не сложно при наличии флага чтения слова)
Memo1.Lines[CurLine] := Memo1.Lines[CurLine] + CurChar;
Memo1.Lines.Add('');
Inc(CurLine);
end;
' ', ',', ':', '-': //прочие знаки препинания и пробелы, можно добавить еще
begin
//что делать если окончилось слово внутри предложения. в вашем случае сбрасываем флаг чтения слова и готовим следующую переменную для сохранения слова
Memo1.Lines[CurLine] := Memo1.Lines[CurLine] + CurChar;
end;
end;
end;
f1.Free;
end;
Другие языки программирования и технологии
Как прочитать огромный текстовый файл в PChar на Delphi и разобрать на предложения и слова???
Вячеслав Бондаренко
Большое человеческое СПАСИБО. На самом деле я разбираю что-то типа RUSMARK-овского файла, и совсем отупел....Да это все для Ирбиса....
Ответ SergiusPl немного некорректен. В принципе правильно, но надо учесть, что могут встречаться еще символы "знак вопроса", "Восклицательный знак", и т. д.
Поэтому считаем так. Ищем пробелы - +1 слово. Если встречаются символы, которыми может заканчиваться предложение - +1 предложение.
Поэтому считаем так. Ищем пробелы - +1 слово. Если встречаются символы, которыми может заканчиваться предложение - +1 предложение.
угу так и есть=)
Ну так чисто теоретически, запускаем цикл. В цикле прокручиваем весь файл есть буква если после нее есть пробел значить + 1 слово, если точка + 1 предложение. Делали что то подобное когда учились, главное начать там ничего сложного нет)
Вячеслав Бондаренко
Мне бы с куском кода,,,,
Похожие вопросы
- Assembler: вывод через текстовый файл.
- Открывается текстовый файл но не записывается - C++
- Задача на ПаскалеИмеется текстовый файл. Переписать его строки в обратном порядке в другой файл
- Какими текстовыми редакторами можно полноценно открыть 11 гигабайтный текстовый файл?
- Как из pdf можно сделать какой-нибудь текстовый файл?
- Как переделать jpg в текстовый файл??
- Есть текстовый файл для программы-теста. вопрос в нем - не понятные символы. можно расшифровать?
- Такой вопрос с кодировкой в visual studio, мне надо чтобы я мог писать в текстовый файл текст, но пишет кракозябры
- DELPHI 7!? Одна небольшая регулярка, напр. слово 24.-aurum , как разгруппировать на слово и на (не буквы)?
- Помогите с файлами в с++ Подскажите пожалуйста как просто прочитать информацию с файла, и в дальнейшем работать с ней.