Как найти слово в файле паскаль

Дамир1991

1 / 1 / 0

Регистрация: 19.10.2010

Сообщений: 51

1

Найти слово в файле

23.06.2011, 09:44. Показов 3811. Ответов 3

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

дан текстовый фаил, вводим слово и ищем его в данном фаиле при нахождении записываем его в другой фаил

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
      var
               f,t:file of text; st:string; s:char;
                BEGIN
                writeln('ââåäèòå ñëîâî');
                readln(st);
                 assign(f,'1.text');
                  reset(f);
                  assign(t,'21.text');
                  rewrite(t);
 
 
                 while not eof(f) do
                 begin
                  while not eoln(f) do
                   begin
                   read(f,s);
                   if s=st then
                   write(t,s:5);
                   end;
                   readln(f);
                   writeln(t);
                   end;
                   close(f);
                   close(t);
                   end.



0



Почетный модератор

64285 / 47584 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

23.06.2011, 09:50

2

И не поймешь, поскольку понятия не имеешь, что хочешь и что пишешь..



0



1 / 1 / 0

Регистрация: 19.10.2010

Сообщений: 51

23.06.2011, 10:20

 [ТС]

3

в той программе я разобрался спасиб, помоги разобраться в другой, дан текстовый фаил и слово, наити все строки в котором содержится данное слово и все эти строки записать в новый фаил, дай подсказку небольшую



0



Puporev

Почетный модератор

64285 / 47584 / 32739

Регистрация: 18.05.2008

Сообщений: 115,182

23.06.2011, 11:17

4

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
uses crt;
const rz=[' ',',','.'];{пусть между словами пробелы, запятые, точки, можешь добавить}
var f,g:text;
    s,sl:string;
    p:byte;
begin
clrscr;
assign(f,'text1.txt');
reset(f);
assign(g,'text2.txt');
rewrite(g);
write('Введите слово для поиска ');
readln(sl);
while not eof(f) do
 begin
  readln(f,s);
  p:=pos(sl,s);{позиция первого вхождения слова}
  if(p>0){если больше ноля}
  and((p=1)or(s[p-1] in rz)){и слово первое или перед ним разделитель}
  and((p+length(sl)=length(s))or(s[p+length(sl)] in rz)){или последнее или после него разделитель}
  then writeln(g,s);{пишем в новый файл}
 end;
close(f);
close(g);
write('Файл text1 переписан в файл text2');
readln
end.



0



Лучший ответ

Александр Устименко

Просветленный

(24306)


6 лет назад

Решение на Pascal ABC

var f1: text;
i: integer;
stroka, slovo: string;
begin
Assign(f1, ‘input.txt’);
Reset(f1);
write (‘slovo=’);
readln (slovo);
i:=0;
while not Eof(f1) do
begin
readln (f1, stroka);
if slovo in stroka then inc(i);
end;
Close(f1);
if i <> 0 then writeln (‘Слово есть в файле’)
else writeln (‘Слово отсутствует, в файле’);
end.

Остальные ответы

Сергей Кротов

Мыслитель

(7618)


6 лет назад

блин, в учебниках по Си, это стандартные учебные программы – они там приводятся и подрлбно разбираются

Капитан ГуглИскусственный Интеллект (145967)

6 лет назад

На Паскале точно так же.
Просто этому не хочется ничего читать или хотя бы искать в гугле, ему хочется, чтобы за него все сделали Двое из Ларца.

Юрий Моисеев

Оракул

(83754)


6 лет назад

Если файл состоит из слов, расположенных в столбик то примерно так
readln(slovo);
while not eof(f) do
begin
readln(f,s);
if s=slovo then…

end;

Автор Тема: Программа,позволяющая найти нужные слова в файле(pascal abc).Подобие поисковика.  (Прочитано 12042 раз)
0 Пользователей и 1 Гость смотрят эту тему.
mary

Новенький

ru
Offline Offline


Толком не соображаю в Паскале, а очень нужно разобраться и сделать программу.
Помогите пожалуйста.

var
s,s1,s2,s3,s4: string;
k1,k2: integer;
f:file of char;
c:char;
begin
assign(f,‘c:file.txt’);
reset(f);
read(f); // исходный текст
write(‘введите искомое слово 1: ‘);
readln(s2); // искомое слово
write(‘введите искомое слово 2: ‘);
readln(s3); // искомое слово
s1:=s; // временной переменной присваиваем значение исходного текста
while pos(s2,s1)<>0 do // пока такое слово есть в тексте
begin
inc(k1); // увеличиваем счетчик
delete(s1,pos(s2,s1),length(s2)); // удаляем слово из текста
end;
while pos(s3,s1)<>0 do
begin
inc(k2);
delete(s1,pos(s3,s1),length(s3));
end;
close (f);
begin
if (k1>=1) and (k2>=1) then
writeln(‘в тексте ‘,k1,‘è’,k2,‘ таких слов’)
else
writeln(‘в тексте нет таких слов’);
end;

end.


Записан
Dimka

Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской


Ничего не понял. Что делать, если программа уже представлена публике.


Записан

Программировать – значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)

mary

Новенький

ru
Offline Offline


Программа, к сожалению, лишь читает текст из файла.
а мне нужно,чтоб она осуществляла еще и поиск нужных слов ,которые могут находиться нетолько рядом, но и на расстоянии n симоволов.


Записан
Dimka

Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской


mary, и твои предложения? С какой строчки нужно начать вносить изменения?


Записан

Программировать – значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)

mary

Новенький

ru
Offline Offline


Думаю,начиная отсюда:

read(f); // исходный текст
write(‘введите искомое слово 1: ‘);
readln(s2); // искомое слово
write(‘введите искомое слово 2: ‘);
readln(s3); // искомое слово
s1:=s; // временной переменной присваиваем значение исходного текста
while pos(s2,s1)<>0 do // пока такое слово есть в тексте
begin
inc(k1); // увеличиваем счетчик
delete(s1,pos(s2,s1),length(s2)); // удаляем слово из текста
end;
while pos(s3,s1)<>0 do
begin
inc(k2);
delete(s1,pos(s3,s1),length(s3));
end;
close (f);
begin
if (k1>=1) and (k2>=1) then
writeln(‘в тексте ‘,k1,‘è’,k2,‘ таких слов’)
else
writeln(‘в тексте нет таких слов’);
end;

end.


Записан
PooH

Глобальный модератор

ru
Offline Offline
Пол: Мужской

… и можно без хлеба!


Толком не соображаю в Паскале

а если без привязки в паскале, какой алгоритм должен быть?

Добавлено через 6 минут и 46 секунд:

Программа, к сожалению, лишь читает текст из файла.

овет не правильный.

 Программа не только должна (но на самом деле в тексте ошибка) читать из файла, но и находит слова, подсчитывает их.

« Последнее редактирование: 07-11-2013 13:15 от PooH »
Записан

Удачного всем кодинга! -=x[PooH]x=-

mary

Новенький

ru
Offline Offline


Да-да,она должна находить в файле слова,которые задает сам пользователь и находить их в тексте и подсчитывать.
Подобие поиска, ctrl+F.


Записан
PooH

Глобальный модератор

ru
Offline Offline
Пол: Мужской

… и можно без хлеба!


Так и что ты от нас хочешь? В твоей программе уже все есть.


Записан

Удачного всем кодинга! -=x[PooH]x=-

Dimka

Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской


PooH, она хочет, чтобы искались слова не только подряд, но и на расстоянии n.

Однако налицо, что код чужой, и она в нём не понимает – тут медицина бессильна.


Записан

Программировать – значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)

PooH

Глобальный модератор

ru
Offline Offline
Пол: Мужской

… и можно без хлеба!


Dimka, а тут в коде и нет никакой проверки порядка, тут только не слова ищутся, а куски текста.


Записан

Удачного всем кодинга! -=x[PooH]x=-

Есть код для поиска строк:

procedure Form4.button1_Click(sender: Object; e: EventArgs);
var F:TextFile;// Переменной присваивается значение TextFile
Str:string;// Переменной присваивается значение String
begin
  Assign(F,'C:UsersНеизвестенDesktopЗаписнаяnomer.txt');
  reset(F);// Открывает текстовый файл для чтения
  while not eof(F) do// Цикл, который перебирает строки 
   begin
      readln(F, Str);// Ввод словабуквыцифры для поиска строки
      if pos(textbox1.text, Str)>0 //  есть ли словобуквацифра в строке
      then
      textbox2.text:= str; // Вывод строки в текстбокс
   end;
   CloseFile(F);// Закрыть файл
end;

Код работает но возникла проблема. Допустим у меня есть в файле такая информация:

12345 Максим

67890 Максим

При вводе “Максим” мне выдает только посл. строку. А надо все строки в которых есть это слово. Как это организовать?

задан 28 мая 2014 в 7:24

Sin2p's user avatar

вместо

textbox2.text:= str;

написать

textbox2.Text:= textbox2.Text + #13#10 + str;

Если писать textbox2.text:= str;, то вы каждый раз будете затирать прошлую запись в текстбоксе. А когда напишете textbox2.Text:= textbox2.Text + #13#10 + str;, то к предыдущей записи будете прибавлять новую. Такая операция сложения строк называется конкатенацией.


Гуглите конкатенацию и прочие операции со строками.

ответ дан 28 мая 2014 в 8:21

teanЫЧ's user avatar

teanЫЧteanЫЧ

4,6852 золотых знака28 серебряных знаков46 бронзовых знаков

1

Horita

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

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

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

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

Я посмотрела “Разбиение строки на слова” думаю это бы подошло, а как дальше низнаю :(

Аватара пользователя

somewhere

Сообщения:1837
Зарегистрирован:31 авг 2006, 17:14
Откуда:71 RUS
Контактная информация:

06 окт 2008, 14:02

Читайте про функцию POS, применять для каждой строки исходного текста. Если слово (подстрока) в строке файла найдено, то поиск для этой строки повторить с позиции после найденого слова.

It’s a long way to the top if you wanna rock’n’roll

Хыиуду

Сообщения:2388
Зарегистрирован:06 мар 2005, 21:03
Откуда:Москва
Контактная информация:

06 окт 2008, 16:43

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

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

в цикле считать строку
Разбивать на слова
Если очередное слово совпадает с заданным, то:
    функцией textcolor меняем цвет шрифта
    выводим слово
    той же функцией меняем цвет обратно (вроде бы светло-серый - 11?)
Если же нет - просто выводим слово

Искусство программирования – заставить компьютер делать все то, что вам делать лень.
Для “спасибо” есть кнопка “Спасибо” в виде звездочки внизу под ником автора поста.

Horita

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

08 окт 2008, 10:16

Эм, а не могли бы вы хоть какойто код выложить, я уже 5 день голову ломаю.

Serge_Bliznykov

Сообщения:366
Зарегистрирован:31 авг 2007, 03:06

08 окт 2008, 11:25

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

08 окт 2008, 14:55

Да, я таким и выводила. Размер файла не ограничен. Там может быть хоть целая книга. Даже может бы ть одно и тоже слово несколько раз, хотя это в задании не сказано.

Horita

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

08 окт 2008, 15:04

Я вас не послушала и таки искала по буквам :) Додумалась птомучто тока до этого. И почти все получилось, но чтобы считать слово 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.

Низнаю где ошибка.

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

Добавить комментарий