|
Вопрос # 2 659/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Прошу оказать помощь в решении одного вопроса.
Имеется текстовый файл, содержащий в числе прочего текста фамилии, имена и отчества людей вида " апап пап пап пап Иванов Иван Иванович прп рпр рпр рпр рп Петров Петр Петрович пап пап ....".
Как средствами Delphi последовательно произвести поиск в файле всех ФИО и сохранить их в отдельный файл построчно, что был файл вида
....
Иванов Иван Иванович
Петров Петр Петрович
.....
И еще в продолжение вопроса.
Как в тексте найти три подряд идущих слова, начинающихся с заглавной буквы?
Заранее благодарен.
Al_Sha
 |
Вопрос задал: Al_Sha (статус: Посетитель)
Вопрос отправлен: 19 апреля 2009, 17:41
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 21 апреля 2009, 07:22; участников в обсуждении: 3.
|
min@y™ (статус: Доктор наук), 19 апреля 2009, 17:47 [#1]:
Так задача сводится именно к поиску трёх слов подряд (через пробел), начинающихся с заглавной буквы?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Al_Sha (статус: Посетитель), 19 апреля 2009, 18:04 [#2]:
Ну в принципе, да...
Ведь фамилия, имя, отчество это три подряд идущих слова, начинающихся с заглавной буквы.
Просто в своем вопросе я хотел сразу уточнить постановку вопроса...
Извиняюсь, если что не так...
|
|
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 (статус: Посетитель), 21 апреля 2009, 07:22 [#4]:
Уважаемый n4r.c0m
Спасибо тебе за поддержку...
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|