Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2010, 14:53   #1
glagoff
 
Регистрация: 04.05.2010
Сообщений: 5
По умолчанию Поиск данных в текстовом файле (в самом файле! а не в Memo и не загружая всю инфу из файла в одну строку

Не могли бы вы помочь с задачей..5.
Дан текстовый файл с несколькими строками. Найти номер первого предложения, где у всех слов первая буква совпадает с последней, или вывести сообщение, что таких предложений нет. Замечание: после нахождения нужного предложения, дальше просматривать файл бессмысленно.
Скидываю свое решение с комментариями,но пашет она как то криво,если не сложно подправьте пожалуйста...3 неделю сдать не могу преподу.
Если сделать слова вперемешку:латинские и русские,то она не ищет.
Вложения
Тип файла: rar 7 (3).rar (320.1 Кб, 8 просмотров)
glagoff вне форума Ответить с цитированием
Старый 05.05.2010, 13:00   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию Вот так как-то

Код:
procedure TForm1.Button6Click(Sender: TObject);
const
 ci = [',', ' ', Chr(10), Chr(13)]; // символы конца слова
 cj = ['.', '!', '?']; // символы конца предложения
var
 f: TextFile;
 c : Char;
 WordArray : array of array of String;
 FirstLetter : Char ; // Первый символ в текущем слове
 LastLetter : Char ; // Текущий символ в текущем слове
 Status : integer ; // состояние 0 - слово, 1-слово окончено 2- предложение окончено
 WordFlag : Boolean ; // Последнее слово правильное
 SentCount : integer ; // Счетчик предложений
 ExistsLetter : Boolean ; // Есть хотя бы один символ в предложении
begin
if not OpenDialog1.Execute then Exit;
Status := 2;
SentCount := 1;
ExistsLetter := False;
AssignFile(f, OpenDialog1.FileName);
Reset(f);
WordFlag := True;
while not eof(f) do
 begin
 Read (f,c);
 // процедура обработки
 if c in cj then
  begin // конец предложения
  case Status of
  0,1:
   begin
   if FirstLetter <> LastLetter then WordFlag := False ;
   if WordFlag and ExistsLetter then
    begin
    ShowMessage ('Номер предложения : ' + IntToStr(SentCount) );
    Exit;
    end ;
   end ;
  2: begin end ;
  end ; // case
  inc (SentCount);
  WordFlag := True;
  Status := 2;
  ExistsLetter := False;
  end
 else if c in ci then
  begin // конец слова
  if Status = 0 then
   begin
   if FirstLetter <> LastLetter then WordFlag := False ;
   end ;
  Status := 1;
  end
 else
  begin // просто очередной символ
  case Status of
  2:
   begin // началось новое предложение и новое слово
   FirstLetter := c;
   end;
  1:
   begin // началось новое слово
   FirstLetter := c;
   LastLetter := c;
   end;
  0:
   begin
   LastLetter := c;
   ExistsLetter := True;
   end ;
  end ; // case
  Status := 0;
  end ;

 end ;
From Stilet: у нас принято форматировать код тегом по кнопке #
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948

Последний раз редактировалось Stilet; 05.05.2010 в 13:26.
Z1000000 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в текстовом файле! Straiker Паскаль, Turbo Pascal, PascalABC.NET 2 18.01.2009 10:07
Поиск в текстовом файле KaimaS Общие вопросы C/C++ 0 12.11.2008 17:39
Поиск данных в текстовом файле BizON Помощь студентам 1 06.06.2007 18:17