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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 13.11.2014, 00:08   #1
IDejA
 
Регистрация: 12.03.2013
Сообщений: 8
Восклицание PascalABC, файлы

даны 2 текстовых файла : text.txt - в нем текст большого объема произвольной темы; key.txt - ключевые слова (20 слов + все возможные вариации этих слов(текст, текстовый, текстов...)). Необходимо подсчитать количество ключевых слов в данном тексте (вот с этим и проблема)
заранее спасибо.


Код:
Const mn=[' ',',','.','?','!'];
Var f1,f2:text;
    s,s2,sl:string;
    i,k1,k2:integer;
Begin
    Assign(f1,'text.txt');
    Reset(f1);
    While not Eof(f1) do
    Begin
      readln(f1,s);
      s:=s+' ';
      For i:=1 to Length(s) do
      Begin
        if not(s[i] in mn) then sl:=sl+s[i]
        else
        Begin
          if sl<>'' then inc(k1);
          sl:='';
        End;
      End;
    End;
    writeln('всего слов в тексте = ',k1);
    Close(f1);
   
 // до этого момента все хорошо, но я не знаю
// как из одного файла взять слово и прогнать его по всему тексту из другого файла,
// запуталась уже окончательно:confused:
 
       k2:=0;
     Assign(f1,'text.txt');
    Reset(f1);
      Assign(f2,'key.txt');
    Reset(f2);
 
    While not Eof(f1) do
Begin
      readln(f2,s2);
         readln(f1,s);
        if s=s2 then k2:=k2+1;
end;
 
    writeln('ключевых слов в тексте = ',k2);
    Close(f1);
    Close(f2);
    
    if k2/k1*100>10 then
    writeln('данныей текст такой-то темы')
    else writeln('данный текст неизвестной темы') ;
End.
IDejA вне форума
Старый 13.11.2014, 07:25   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

По-хорошему так не делают, но тебе можно )
Все равно не пожелаешь разобратьтся...
Код:
     Assign(f1,'text.txt');    Reset(f1);
      Assign(f2,'key.txt');    Reset(f2);
 
    While not Eof(f2) doBegin
         readln(f2,s2);
         reset(f1); while not Eof(f1) do begin
           readln(f1,s);
           if s=s2 then k2:=k2+1;
         end;
    end;
I'm learning to live...
Stilet вне форума
Старый 13.11.2014, 08:44   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

А обязательно ABC использовать?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума
Старый 13.11.2014, 08:49   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Виталий, так не будет работать.
У неё же в исходном тексте ТЕКСТ (а не отдельные слова).
(обратите внимание на первую часть программы, где она выделяет группы символов, разделённых знаками препинания и пробелами (см. mn) и подсчитывает их количество.



IDejA, только потому, что у Вас были качественные наработки по чтению и разбору текста,
вот, в качестве БОНУСА, полностью работающий код:

Код:
Const mn=[' ',',','.','?','!'];
Const
   KeyFileName = 'key.txt'; {имя файла с ключевыми словами}
   MaxKeywords = 400; {максимально в файле прочитается столько ключевых слов}

Var f1:text;
    s,sl:string;
    i,j,k1,k2:integer;
    keywords : array[1..MaxKeywords] of string[80];
    nkeys : integer;
Begin
    Assign(f1, KeyFileName);
    Reset(f1);
    nkeys := 0;
    while not eof(f1) do begin
       ReadLn(f1, s);  {ВНИММАНИЕ! КАЖДОЕ КЛЮЧЕВОЕ СЛОВО ДОЛЖНО БЫТЬ
                            НА ОТДЕЛЬНОЙ СТРОКЕ!}
       if Trim(s)<>'' then
         begin Inc(nkeys); keywords[nkeys] := s; end;
       if nkeys = MaxKeywords then begin
         WriteLn('Из файла ',
            KeyFileName,' прочитано максимальное число слов (',MaxKeywords,')');
         WriteLn('Оставшиеся ключевые слова игнорируются...');
         WriteLn;
         Break
       end;
    end;
    Close(f1);
    
    WriteLn('Для отладки выведем список прочитанных ключевых слов:');
    for i:=1 to nkeys do Write(keywords[i],' '); WriteLn;

    {обработка исходного файла}
    Assign(f1,'text.txt');
    Reset(f1);
    k1 := 0;  {счётчик слов в исходном тексте}
    k2 := 0;  {счётчик слов в исходном тексте, совпавших с ключевыми}
    While not Eof(f1) do
    Begin
      readln(f1,s);
      s:=s+' ';
      For i:=1 to Length(s) do
      Begin
        if not(s[i] in mn) then sl:=sl+s[i]
        else
        Begin
          if sl<>'' then begin
             inc(k1);
                 // отладка - вывод слов текста Write(UpperCase(sl), ' ');

             // найдём,есть ли совпадения с ключевыми словами
             for j:=1 to nkeys do
               if UpperCase(sl) = UpperCase(keywords[j]) then begin
                 Inc(k2);
                 Break
               end;

          end;
          sl:='';
        End;
      End;
    End;
    Close(f1);
    WriteLn;
    writeln('всего слов в тексте = ',k1);
    writeln('ключевых слов в тексте = ',k2);

    if k1>0 then begin
      WriteLn('процент совпадения = ',(k2/k1*100):2:1,'%');
      if k2/k1*100>10 then
      writeln('данный текст такой-то темы')
      else writeln('данный текст неизвестной темы') ;
    end;
End.

Последний раз редактировалось Serge_Bliznykov; 13.11.2014 в 09:21.
Serge_Bliznykov вне форума
Старый 13.11.2014, 09:50   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
У неё же в исходном тексте ТЕКСТ (а не отдельные слова).
Ну может быть. Файлов то не прикладено )
I'm learning to live...
Stilet вне форума
Старый 13.11.2014, 16:45   #6
IDejA
 
Регистрация: 12.03.2013
Сообщений: 8
По умолчанию

Все работает, СПАСИБО Вам огромное!
IDejA вне форума
Старый 14.11.2014, 09:32   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

пожалуйста!

тему закрываю...
Serge_Bliznykov вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файлы(PascalABC). Дан символьный файл f. Записать в файл g с сохранением порядка следования символы файла f после символа 'a' Артемdgty Помощь студентам 0 09.10.2013 00:39
PascalABC. Записи и файлы lems Помощь студентам 0 11.06.2012 13:18
PascalABC Юся=) Помощь студентам 0 28.12.2011 00:42
PascalABC. файлы. Gorny Помощь студентам 5 02.12.2009 21:06
PascalABC. массивы и файлы Gorny Помощь студентам 1 01.12.2009 12:14