Опубликован: 15.11.2010 | Уровень: для всех | Доступ: платный
Лекция 1:

Классификация ввода-вывода

Лекция 1: 12345678 || Лекция 2 >

1.5.4. Потоковый фильтр sed

  1. Потоковый фильтр sed служит для построчного редактирования строковых (текстовых) данных. Этот фильтр появился впервые в UNIX системах [23 ], но в настоящее время он доступен и для операционных систем Windows;
  2. Фильтр работает следующим образом:
    • Из потока стандартного ввода, или из файлов, записанных в командной строке, последовательно, строка за строкой, считывается информация;
    • К указанным строкам применяются команды, записанные в командной строке или считанные из файла, указанного опцией: "-f "имя файла" ;
    • Изменённые строки записываются в стандартный поток вывода (на экран дисплея), который можно перенаправить в файл;
  3. Средства потокового фильтра sed для вывода строк текста предоставляют команды:
    • Команда "a" ("append") вставляет строку с текстом после выбранной строки текста. Синтаксис команды:
      "адрес строки" a \"добавляемый текст"
      Листинг 1.20.
    • Команда "i" ("insert") вставляет строку с текстом перед выбранной строкой текста. Синтаксис команды:
      "адрес строки" i \"добавляемый текст"
      Листинг 1.21.
    • Команда "s" ("substitute") производит замену текста по образцу;
    • Команда "d" ("delete") удаляет текущую строку или диапазон строк из текста. Синтаксис команды:
      "адрес строки или диапазон" d
      Листинг 1.22.
      Примечание: Адрес строки может быть абсолютным (номер строки, последняя строка обозначается как "$" ), и относительным (+ или - "число строк", отсчитываемых от текущей строки). Также в качестве адреса можно использовать фрагмент подстроки, находящейся в тексте строки. Он обозначается следующим образом: /"образец"/, где "образец" - строковый литерал или шаблон регулярного выражения.
  4. Синтаксис вызова потокового фильтра sed следующий:
    $ sed '"команда редактирования"' "список файлов"
    Листинг 1.23.

    или

    $ sed -f "имя файла с командами" "список обрабатываемых файлов"
    Листинг 1.24.
  5. С помощью фильтра sed можно выводить только строки, содержащие заданный образец. Это делается выражением:
    $ sed -n '/"образец"/ p' "список файлов"
    Листинг 1.25.
  6. Все команды редактирования sed по-умолчанию глобальные, все входные строки по-умолчанию выводятся в стандартный вывод;
  7. Хотя многие команды потокового редактора sed совпадают с командами построчного редактора ed, команды, для выполнения которых необходимо более одной строки, должны читаться из файла. К таким командам относится команда 'a'. Первая строка - сама команда "a", а остальные строки - текст, который нужно добавить. При этом в конце каждой строки необходимо поставить символ "\", иначе оболочка будет интерпретировать символ новой строки как конец команды.

1.5.5. Язык Quick Basic

В языке Quick Basic есть следующие правила оформления программ:

  1. Программа на языке Quick Basic находится в файле с расширением "*.bas" ;
  2. Основная программа начинается с первого её оператора;
  3. Желательно "нумеровать" все строки файла метками - натуральными числами. Нумерацию строк желательно начинать с числа 10 и задать шаг нумерации тоже 10;
  4. Заканчиваться вычисления в программе должны оператором: "STOP" ;
  5. Завершаться описание всех алгоритмических конструкций в программе необходимо оператором: "END" ;
  6. На каждый оператор выделяется одна строка;
  7. Комментарии к строкам алгоритма должны начинаться отдельной строкой, после ключевого слова: "REM", которые указываются сразу после метки (или вместо метки);
  8. Подпрограммы на языке: "Quick Basic", оформляются отдельно, внутри файла;
  9. Оформление подпрограмм начинается с ключевого слова: "SUB", за которым идёт имя подпрограммы;
  10. Выполнение программы на языке "Quick Basic", открытой в его оболочке ( "qbasic.exe" ), начинается после выбора меню: "Run" -> "Continue", или нажатием клавиши: "F5".
  11. Символ "=" используется и как оператор присвоения значений переменным, и как оператор сравнения (эквивалентности) численных и символьных данных.

Ниже в примере 1.4 приведена программа на Quick Basic для иллюстрации ввода-вывода текста:

Пример 1.4.

REM Файл ex01004.bas
REM Вывод диалога
PRINT "Hello, World!"
PRINT "Не желаете ли поговорить? ";
PRINT "Введите 'y' или 'Y' для Да или другую букву для нет."
REM Ввод ответа на запрос
INPUT ANSWER$
IF ANSWER$ = "Y" OR ANSWER$ = "y" THEN PRINT "Прекрасная погода, не так ли?"
PRINT "До свидания!"
REM Завершение работы программы
PRINT "Press key Enter to exit..."
INPUT JUNK$
STOP
END
REM Конец программы

1.5.6. Язык Си/Си плюс плюс

На языке Си и, частично, С++, существуют следующие правила оформления программ [3, 10, 30, 41]:

  1. Программа на языке Си находится в файле с расширением: "*.c", а на языке C++ - с расширением "*.cpp" ;
  2. Файлы с "заголовочной частью" к основной программе находятся в файлах с расширением "*.h" и "*.hpp" ;
  3. Основная программа (которая затем будет запускаться по имени файла, например, "myprog.exe" ), должна иметь имя и расширение "myprog.c". То есть, в общем случае, имя основного файла проекта - "<имя проекта>.c" (для программ на Си) или "<имя проекта>.cpp" (для программ на языке С++), где <имя проекта> будет соответствовать имени Вашей программы после компиляции;
  4. Файл с программой начинается с включения (в заголовочной части) файлов с расширением "*.h" и "*.hpp", с помощью прагма оператора: "include". При этом имена заголовочных файлов, находящихся в одном каталоге с файлами-описаниями алгоритма, заключаются в кавычки, а имена файлов, пути к которым прописаны в переменной операционной системы: "INCLUDE", заключаются между знаками: "<…>", например:
    • "  #include <stdio.h>
      Листинг 1.26.
    • "  #include "myprog.h"
      Листинг 1.27.
  5. Далее в файле с основной программой задаётся основная функция алгоритма: "main", - управляющая вызовом всех остальных функций и подпрограмм.

    Примечание: при программировании на языке Си с использованием библиотеки Windows API основной функцией алгоритма становится функция: WinMain. Подробнее об этой функции смотри [33].

  6. Функция "main" из пункта 5 может возвращать целое значение (тип "int" ). Это значение впоследствии используется при запуске функции внутри командного файла оболочки операционной системы, для его реакции на неудачный результат работы этой функции. Принято, что в случае успешного результата своей работы функция "main" возвращает нулевой результат.
  7. Функция "main" может принимать в качестве аргументов следующие формальные параметры [3]:
    main( int argc, char *argv[], char *env[])
    Листинг 1.28.

    где

    • argc - число аргументов у функции. Эта переменная принимает значение 1 в случае отсутствия опций и параметров, 2 в случае присутствия одного параметра и т.п.;
    • *argv[] - массив символьных переменных - указателей на опции и аргументы программы, запускаемой из командной строки. При этом элементу "0" соответствует полное путевое имя файла с запускаемой программой. Элементам с номерами: "1" - "argc-1" соответствуют аргументы программы, набранные в командной строке, с соответствующими номерами (по-порядку);
    • *env[] - массив символьных переменных - указателей на системное окружение операционной системы, в которой запускается скомпилированная программа.
  8. Комментарии на языках: "Си" и "С++" обозначаются следующим образом:
    • Игнорирование конца строки вслед за комментарием: "//" ;
    • Игнорирование текста внутри "скобок" - спецсимволов: "/* … */".
  9. Тексты-описания функций и процедур на языке: "Си" располагаются либо после описания функции "main", либо в отдельных файлах (с расширениями: "*.C" и "*.CPP" соответственно для функций "Си" и "C++" ).
  10. В "заголовочных файлах" (с расширением: "*.h" и "*.hpp" ) задаются, во-первых, директивы компилятору на обработку файлов, во-вторых, макрофункции и макроподстановки, в-третьих, определения констант и глобальных переменных в программе, и, в-четвёртых, объявления функций. Формат описания заголовочной части смотри в приложении №II (1.7) к данной лекции.
  11. Перед запуском программы, написанной на языках Си и C++, необходимо сначала "скомпилировать" модули и "построить", скомпоновать ( "Build" ) проект в IDE (с именем: "<имя проекта>" ), а затем запустить её, либо набрав в командной строке: <имя проекта>.exe {<опции>}*, либо щёлкнув на иконке этой программы (в Windows).

Подробнее о других аспектах программирования на C/C++ смотри: [3, 10, 30, 35-40, 41]

В примере 1.5 написана простейшая программа на языке Си (версия Borland C/C++ 3.1), иллюстрирующая текстовый ввод-вывод данных.

Пример 1.5.

// Файл ex01005.c
/************************************************
 * ВНИМАНИЕ!
 * Программа оптимизирована под компилятор
 * Borland C/C++ 3.01
************************************************/
// Подключение библиотек
#include <conio.h>

void main( void )
{
  // Определение переменных
  char cAnswer, cJunk;
  // Вызов диалога
  cputs( "\r\nHello, World!" );
  cputs( "\r\nНе желаете ли поговорить? " );
  cputs( "Введите 'y' или 'Y' для Да или другую букву для нет.\r\n" );
  // Ввод ответа на запрос
  cAnswer = getche();
  if( cAnswer == 'Y' || cAnswer == 'y' ) cputs( "\r\nПрекрасная погода, не так ли?" );
  cputs( "\r\nДо свидания!" );
  // Завершение работы программы
  cputs( "\r\nPress key Enter to exit...\r\n" );
  cJunk = getche();
}
/* Конец программы */
Лекция 1: 12345678 || Лекция 2 >