[Pascal] Поиск слова в файле.

Ответить
Horita
Сообщения: 14
Зарегистрирован: 06 окт 2008, 11:18

Задача: Дан файл, с каким либо русским текстом, надо найти в этом файле слово, введеное пользователем. Потом это слово нужно выделить цветом, в исходном тексте.

Первоночально мой алгоритм был таким. Я думала сверять по буквам, дошла до нахождения 1 буквы и записывания оставшихся в остаток, 2 букву у меня упорно не находило. :(

А как зделать 2 часть задания я низнаю вобще, даже незнаю как цветом выделить.

Я посмотрела "Разбиение строки на слова" думаю это бы подошло, а как дальше низнаю :(
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Читайте про функцию POS, применять для каждой строки исходного текста. Если слово (подстрока) в строке файла найдено, то поиск для этой строки повторить с позиции после найденого слова.
It's a long way to the top if you wanna rock'n'roll
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

А что значит "выделить слово цветом в исходном тексте"? Вывести весь текст на экран, а это слово другим цветом, что ли?
Короче, примерно так:

Код: Выделить всё

в цикле считать строку
Разбивать на слова
Если очередное слово совпадает с заданным, то:
    функцией textcolor меняем цвет шрифта
    выводим слово
    той же функцией меняем цвет обратно (вроде бы светло-серый - 11?)
Если же нет - просто выводим слово
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Horita
Сообщения: 14
Зарегистрирован: 06 окт 2008, 11:18

Да, надо имено весь текст вывести и там выделить слово.
Horita
Сообщения: 14
Зарегистрирован: 06 окт 2008, 11:18

Эм, а не могли бы вы хоть какойто код выложить, я уже 5 день голову ломаю.
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

Horita, тут основная сложность - " выделить цветом, в исходном тексте."
Приведите пример - КАК Вы отображаете исходный текст...
тогда можно будет чем-то Вам помочь..

вот, например, если текст менее 25 строк, то такой способ вывода устроит ? (это без выделения пока... ;-):

Код: Выделить всё

  uses crt;
....
begin
  ClrScr;
  Assign(F,'source.txt');
  Reset(F);
  While Not Eof(f) do begin
     Readln(F,s);
     WriteLn(s)
  end;
  Close(F);
end.
Horita
Сообщения: 14
Зарегистрирован: 06 окт 2008, 11:18

Да, я таким и выводила. Размер файла не ограничен. Там может быть хоть целая книга. Даже может бы ть одно и тоже слово несколько раз, хотя это в задании не сказано.
Horita
Сообщения: 14
Зарегистрирован: 06 окт 2008, 11:18

Я вас не послушала и таки искала по буквам :) Додумалась птомучто тока до этого. И почти все получилось, но чтобы считать слово 2 раза я его в файл засунула и теперь у меня выводит пустую строку.

Вот код.

Код: Выделить всё

PROGRAM seach_;
VAR
  T, F: TEXT;
  Sl, Ch1,Ch2, Ch3: CHAR;
  Ch: STRING;
  Counter, Counter2: INTEGER;
PROCEDURE search;
BEGIN
  Ch1 := ' ';
  Ch2 := 'Y';
WHILE (NOT EOF(T)) AND (Ch2 = 'Y')
DO
  BEGIN
  READ(T, Ch1);
  IF (Ch1 = Sl)
  THEN
    BEGIN
      Ch2 := 'N';
      WRITE(Ch1);
      Ch := Ch1;
    END;
  END;
END;
PROCEDURE Ost;
BEGIN
  IF Sl <> ' '
  THEN
    BEGIN
      READ(Sl);
    END;
END;
BEGIN
  ASSIGN(T, 'Text1.txt');
  ASSIGN(F, 'File.txt');
  RESET(T);
  REWRITE(F);
  Counter := 0;
  Counter2 := 0;
  WRITE('Введите слово: ');
  WHILE NOT EOLN
  DO
    BEGIN
      READ(Ch);
      WRITE(F, Ch);
    END;
  RESET(F);
  WHILE NOT EOLN
  DO
    BEGIN
      READ(F, Ch3);
      Counter := Counter + 1;
    END;
  WHILE NOT EOLN(F)
  DO
    BEGIN
      READ(F, Sl);
      WHILE Counter2 <> Counter
      DO
        BEGIN
          Search;
          ost;
          Counter2 := Counter2 + 1;
        END;
    END;
END.
Низнаю где ошибка.

Впринцыпе, не хотела в файл слово вставлять, поэтому если скажите как можно здесь без файла обойтись то буду рада.
Ответить