Advertisement
Guest User

PascalABC.NET - Example by @jkulvich

a guest
Dec 18th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.03 KB | None | 0 0
  1. var
  2.  
  3. // Файловые дескрипторы (descriptor - описатель)
  4. // Хранят в себе различную информацию о файле с которым мы их далее свяжем
  5. F1, F2 : text;
  6.  
  7. // Последняя строка в файле F1
  8. LastLine : string;
  9.  
  10. // Динамический массив (не определана длинна заранее) со списком слов из
  11. // последней строки файла F1
  12. LastWords : array of string;
  13.  
  14. begin
  15.  
  16.   // Связываем файловые дескрипторы с реальными файлами
  17.   // F2 может не существовать, но мы его в будущем создадим, всёравно связываем
  18.   Assign(F1, 'F1.txt');
  19.   Assign(F2, 'F2.txt');
  20.  
  21.   // F1 открываем только на чтение при помощи reset
  22.   // Это позволяет оптимизировать системе работу с этим файлом, т.к. она знает,
  23.   // что мы удем его только лишь читать
  24.   Reset(F1);
  25.  
  26.   // F2 открываем на перезапись
  27.   // Файл будет либо создан если не существовал, либо очищен
  28.   // Говорим системе, что нам не важна предыдущая информация в файле и мы
  29.   // собираемся только лишь записывать в него
  30.   Rewrite(F2);
  31.  
  32.   // Читаем все строки пока файл не закончится
  33.   // Т.к. всегда читаем в одну и ту же переменную LastLine, то в конце концов
  34.   // в ней останется последняя строка из читаемого файла
  35.   // P.S.: EoF - End of File, вернёт true когда файл закончится
  36.   while NOT EoF(F1) do ReadLn(F1, LastLine);
  37.    
  38.   // Разбиваем по пробелу строку на массив слов  
  39.   LastWords := LastLine.ToWords();
  40.    
  41.   // Этим действием мы сбрасываем позицию в которой читаем файл снова на начало,
  42.   // т.к. в этот раз необходимо более чщательно пройтись по каждой строке и
  43.   // проверить, состоит ли в ней одно из слов в LastWords
  44.   Reset(F1);
  45.  
  46.   // Начинаем читать файл снова до конца
  47.   while NOT EoF(F1) do begin          
  48.     // Временная переменная в которую прочитаем одну строку из F1
  49.     var OneLine : string;
  50.     // Читаем эту самую строку сюда
  51.     ReadLn(F1, OneLine);
  52.    
  53.     // Теперь проверяем каждое слово из LastWords на вхождение в OneLine
  54.     foreach var OneWord in LastWords do begin
  55.       // Если текущая строка содержит хотя бы одно из слов в последней строке, то...
  56.       if (OneLine.Contains(OneWord)) then begin          
  57.        
  58.         // Записываем текущую строку в F2
  59.         WriteLn(F2, OneLine);
  60.         // А текущий цикл foreach завершаем досрочно и переходим к следующей строке
  61.         // которая попадётся нам в цикле while (или совсем выходим если достигли конца файла)
  62.         break;
  63.        
  64.       end;
  65.     end;
  66.    
  67.   end;
  68.  
  69.   // Закрываем файловые дескрипторы (освободаем ресурсы системы)
  70.   // Так же этим действием позволяем другим программам работать с этими файлами
  71.   // Как бы снимаем с них блокировку которую мы поставили когда открыли
  72.   Close(F1);
  73.   Close(F2);
  74.  
  75. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement