Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 659

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Прошу оказать помощь в решении одного вопроса.
Имеется текстовый файл, содержащий в числе прочего текста фамилии, имена и отчества людей вида " апап пап пап пап Иванов Иван Иванович прп рпр рпр рпр рп Петров Петр Петрович пап пап ....".
Как средствами Delphi последовательно произвести поиск в файле всех ФИО и сохранить их в отдельный файл построчно, что был файл вида
....
Иванов Иван Иванович
Петров Петр Петрович
.....
И еще в продолжение вопроса.
Как в тексте найти три подряд идущих слова, начинающихся с заглавной буквы?
Заранее благодарен.
Al_Sha

Al_Sha Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Al_Sha (статус: Посетитель)
Вопрос отправлен: 19 апреля 2009, 17:41
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 21 апреля 2009, 07:22; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 19 апреля 2009, 17:47 [#1]:

Так задача сводится именно к поиску трёх слов подряд (через пробел), начинающихся с заглавной буквы?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Al_Sha

Al_Sha (статус: Посетитель), 19 апреля 2009, 18:04 [#2]:

Ну в принципе, да...
Ведь фамилия, имя, отчество это три подряд идущих слова, начинающихся с заглавной буквы.
Просто в своем вопросе я хотел сразу уточнить постановку вопроса...
Извиняюсь, если что не так...
n4r.c0m

n4r.c0m (статус: Посетитель), 20 апреля 2009, 14:42 [#3]:

<code>
var s: string;
i: cardinal;
up: byte;
last_ch: char;
FIO: string;
in_word: boolean;
begin
s := 'апап пап пап пап Иванов Иван Иванович ' +
'прп рпр рпр рпр рп Петров Петр Петрович ' +
'пап пап Петров Петр Петрович';
last_ch := #32;
in_word := False;
up := 0;
for i := 1 to length(s) do
begin
if (((s[i]>=#65) and (s[i]<=#90)) or
((s[i]>=#192) and (s[i]<=#223))) and (last_ch=#32)
then begin
in_word := True;
inc(up);
end;

if in_word then FIO := FIO+s[i];

if (s[i]=#32) or (i=length(s)) then
begin
in_word := False;
if up=3 then
begin
up := 0;
if FIO[length(FIO)]=' ' then SetLength(FIO, length(FIO)-1);

ShowMessage(FIO);
//Здесь, делай с FIO, что душе
//угодно
FIO := '';
end;

end;

last_ch := s[i];
end;
end;
</code>

Сразу уточню, что этот код не может являться обработчиком для больших массивов данных, т.к. он будет, довольно слабым местом(по скорости) в программе.

Хотя... С другой стороны: 10,000 вызов данной процедуры занимает ~60 тиков таймера на процессоре Intel E2160_Conroe (2x1.8Ghz) при FSB - 800Mhz
Al_Sha

Al_Sha (статус: Посетитель), 21 апреля 2009, 07:22 [#4]:

Уважаемый n4r.c0m
Спасибо тебе за поддержку...

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:34
Выполнено за 0.02 сек.