Поиск адреса электронной почты в тектсовом файле - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Поиск адреса электронной почты в тектсовом файле»

textual
Листинг программы
uses
  crt;
const
  limits = [#0..#32,',',':',';','!','?','"'];
  MaxWords = 100;
  MaxLimitWords =1000000;
type
  TWords = array[1..MaxWords] of string[80];
  AllWords = array[1..MaxLimitWords] of string[80];
var
  text : string[80];
  words : TWords;
  mywords:allwords;
  f : textfile;
  nwords:word;
  i,count:dword;
  ch:char;
 
 
function GetWords(s : string; var w : TWords) : Word;
var
  i,back,n : word;
begin
  i := 1;
  n := 0;
  while(i<=length(s)) do
    begin
      while(i<=length(s)) and (s[i] in limits) do
        inc(i);
      if i<=length(s) then
        begin
          back := i;
          while(i<=length(s)) and not(s[i] in limits) do
            inc(i);
         inc(n);
         w[n] := copy(s, back, i-back);
       end;
    end;
  GetWords := n;
end;
 
function CheckMail(s:string):boolean;
var
  isvalidmail:boolean;
  k,i:integer;
begin
  isvalidmail:=false;
  k:=0;
  {содержит недопустимые знаки}
  for i:=1 to length(s) do
    begin
      if (s[i] in ['а'..'я','А'..'Я']) then
        begin
          isvalidmail:=false;
          break;
        end;
      if (s[i] in ['0'..'9','a'..'z','_','.','@']) then
        isvalidmail:=true;
      if s[i]='@' then
        inc(k);
    end;
    {количество @ не равно одному}
  if k<>1 then
       isvalidmail:=false;
  { начинается со знака @ }
    if s[1]='@' then
      isvalidmail:=false;
 
  CheckMail:=isvalidmail;
end;
 
begin
  clrscr;
  assign(f,'example.txt');
  reset(f);
  count:=0;
  while not eof(f) do
    begin
      readln(f,text);
      nwords:=getwords(text,words);
      for i:=1 to nwords do
        mywords[i+count]:=words[i];
      count:=count+nwords;
    end;
  close(f);
  for i:=1 to count do
    if CheckMail(mywords[i]) then
      write((mywords[i]),' ');
  readln;
end.

Объяснение кода листинга программы

  1. uses crt; — подключает стандартные функции и библиотеки
  2. const limits = [#0..#32,',',':',';','!','?',''];` — определяет допустимые символы в тексте
  3. MaxWords = 100; — задает максимальное количество слов в тексте
  4. MaxLimitWords =1000000; — задает максимальное количество слов во всем текстовом файле
  5. type TWords = array[1..MaxWords] of string[80]; — определяет массив слов с заданной длиной
  6. AllWords = array[1..MaxLimitWords] of string[80]; — определяет массив всех слов во всем текстовом файле
  7. var text : string[80]; — объявляет переменную для хранения текста из файла
  8. words : TWords; — объявляет переменную для хранения найденных слов
  9. mywords:allwords; — объявляет переменную для хранения всех слов из файла
  10. f : textfile; — объявляет переменную для работы с файлом
  11. nwords:word; — объявляет переменную для подсчета количества слов
  12. i,count:dword; — объявляет две переменные для счетчика
  13. ch:char; — объявляет переменную для хранения текущего символа
  14. GetWords(s : string; var w : TWords) : Word; — определяет функцию для извлечения слов из строки
  15. CheckMail(s:string):boolean; — определяет функцию для проверки корректности адреса электронной почты
  16. function CheckMail(s:string):boolean; — вызывает функцию CheckMail с аргументом s
  17. begin — начинает выполнение программы
  18. clrscr; — очищает экран
  19. assign(f,'example.txt'); — задает имя файла для чтения
  20. reset(f); — сбрасывает файл на начало
  21. count:=0; — инициализирует счетчик количества слов
  22. while not eof(f) do — начинает цикл чтения файла до конца
  23. begin — начинает внутренний цикл чтения файла
  24. readln(f,text); — читает строку из файла и сохраняет ее в переменной text
  25. nwords:=getwords(text,words); — использует функцию getwords для извлечения слов из строки и сохраняет их в переменной words
  26. for i:=1 to nwords do — начинает цикл сохранения найденных слов в массиве mywords
  27. mywords[i+count]:=words[i]; — сохраняет i-ый найденный слово в массиве mywords
  28. count:=count+nwords; — увеличивает счетчик количества слов
  29. end; — заканчивает внутренний цикл чтения файла
  30. close(f); — закрывает файл
  31. for i:=1 to count do — начинает цикл вывода найденных слов на экран
  32. if CheckMail(mywords[i]) then — использует функцию CheckMail для проверки каждого слова
  33. write((mywords[i]),' '); — выводит i-ое слово на экран
  34. readln; — ждет ввода пользователя
  35. end. — заканчивает выполнение программы

ИИ поможет Вам:


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

Оцени полезность:

13   голосов , оценка 3.846 из 5