Опубликован: 15.11.2010 | Доступ: свободный | Студентов: 643 / 18 | Оценка: 4.00 / 5.00 | Длительность: 17:30:00
Специальности: Программист
Лекция 6:

Буферизированный (потоковый) ввод-вывод

6.2.3. Ввод средствами языка Basic

Ввод данных с клавиатуры в Quick Basic осуществляется при помощи оператора INPUT, о котором подробно было сказано в лекции, посвящённой консольному вводу-выводу. Форматы этого оператора следующие:

ОПЕРАТОР: INPUT
НАЗНАЧЕНИЕ: Форматированный ввод переменных;
СИНТАКСИС: INPUT [;] ["prompt"{; | ,}] <список переменных>
ОПИСАНИЕ: Оператор осуществляет форматированный ввод значений переменных, перечисленных в строке <список переменных> в конце оператора. В качестве значений распознаются символы: ".", "0-9" и "A-Za-z". Строка "prompt" используется для вывода приглашения на ввод данных. Она представляет собой допустимую строку на Бейсике;
ПРИМЕЧАНИЕ:
  1. Оператор INPUT использует запятую как разделитель между именами переменных;
  2. При клавиатурном вводе точка с запятой сразу после имени оператора позволяет курсору остаться на той же строке, с которой производится ввод после нажатия клавиши "Enter" ;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет.

ОПЕРАТОР: LINE INPUT
НАЗНАЧЕНИЕ: Не форматированный ввод строки в символьную переменную.
СИНТАКСИС: LINE INPUT [;] ["prompt";] <символьная переменная>$
ОПИСАНИЕ: Оператор осуществляет неформатированный ввод строки в указанную переменную. В качестве значений допускаются любые символы. Строка "prompt" используется для вывода приглашения на ввод данных. Она представляет собой допустимую строку на Бейсике;
ПРИМЕЧАНИЕ:
  1. Оператор LINE INPUT читает все символы до нажатия пользователем клавиши "Enter" ;
  2. При клавиатурном вводе точка с запятой сразу после имени оператора позволяет курсору остаться на той же строке, с которой производится ввод после нажатия клавиши "Enter" ;
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ: Нет.

Строка "prompt" представляет собой строку текста приглашения, предваряющую ввод данных.

Пример 6.5.

REM FILE EX06005.BAS
REM ФАЙЛ ПРИМЕРА ТЕСТИРОВАЛСЯ В СИСТЕМЕ ПРОГРАММИРОВАНИЯ
REM QUICK BASIC ОПЕРАЦИОННОЙ СИСТЕМЫ MICROSOFT WINDOWS 98
REM
REM ИЛЛЮСТРАЦИЯ ВВОДА-ВЫВОДА СРЕДСТВАМИ QUICK BASIC
REM
REM ВВОД ДАННЫХ О СЕБЕ
INPUT "ВАШ ВОЗРАСТ? "; AGE%
REM ВЫВОД И ОБРАБОТКА ДАННЫХ
PRINT "ДОБРЫЙ ДЕНЬ, ";
IF AGE% < 40 THEN PRINT "МОЛОДОЙ ЧЕЛОВЕК!" ELSE PRINT "ПАПАША!"
INPUT "Press key Enter to Exit...", JUNK
STOP
END

6.2.4. Ввод средствами языка Perl

Для чтения из файла или стандартного потока ввода (обычно это клавиатура) используется операция "ромб" ( <> ), которой в качестве операнда передаётся дескриптор файла, а в случае ввода данных с клавиатуры - никакого операнда. Также для ввода данных со стандартного потока используется предопределённый дескриптор файла STDIN (см. таблицу 6.1). Рассмотрим ввод этими средствами поподробнее:

6.2.4.1. Операция "ромб"

Основное предназначение операции - прочитать одну строку или все строки файла, дескриптор которого представляет собой операнд этой операции. Синтаксис этой операции следующий:

$"переменная" = <"дескриптор">
Листинг 6.1.

или

@"переменная" = <"дескриптор">
Листинг 6.2.

В этих синтаксических конструкциях значение (операнд) "дескриптор" для оператора ввода с клавиатуры опускается или заменяется ключевым словом STDIN.

В первой конструкции в скалярную переменную записывается одна (очередная) строка из файла либо со стандартного потока ввода (до первого появления в строке файла псевдосимвола "EOL" ). Во второй конструкции читаются все (оставшиеся) строки из файла.

Особо отметим, что операция <> без операнда при первом своём появлении проверяет, пуст ли массив операндов программы @ARGV. Если он пуст, то программа переходит в режим ожидания ввода со стандартного устройства, то есть эта операция аналогична конструкции: <STDIN>. Если же этот массив не пуст, то программа трактует каждый параметр в строке как имя файла и считает, что строки этих файлов есть то, что пользователь вводит на стандартном устройстве ввода.

Например, программа из примера 6.6 выводит на экран все строки файлов, перечисленные после него.

Пример 6.6

#!perl -w
# Файл ex06006.pl выводит в стандартный
# поток вывода все строки файлов, перечисленных
# после него
#
# Пример тестировался на компиляторе ActiveState
# Perl 5.8.0
#
while( $line = <> )
{
	print $line;
}
print STDERR "\nPress key Enter to Exit..";
$junk = <STDIN>

Так, конструкция [6.3] просто распечатывает самого себя (файл).

perl ex06006.pl ex06006.pl
Листинг 6.3.

Приведём ещё примеры ввода-вывода стандартными средствами языка Perl:

Пример 6.7

#!perl -w
# File ex06007.pl
# Реализация примера 06.004 на языке Perl
#
# Пример тестировался на компиляторе ActiveState
# Perl 5.8.0
#
print "\nВведите число: ";
$ivalue = <STDIN>;
print "\nВведённое значение: $ivalue";
# Завершение работы
print STDERR "\nPress key Enter to Exit...";
$junk = <STDIN>;
# Конец файла

Пример 6.8

#!perl -w
# File ex06008.pl
# Проверка на наличие ключей, переданных программе
#
# Пример тестировался на компиляторе ActiveState
# Perl 5.8.0
#
while( $_ = $ARGV[0], /^-/)
{
	if(/^-d/||/^-s/||/^-e/)
	{
		print $ARGV[0]."\n";
	}
	else
	{
		print "\nНеизвестный ключ $ARGV[0]\n";
	}
	shift;
}
# Завершение работы
print STDERR "\nPress key Enter to Exit...";
$junk = <STDIN>;
# Конец файла

При вычислении условий цикла while осуществляется присвоение переменной "$_" значения первого элемента массива @ARGV, и проверка наличия дефиса (-) в качестве первого символа (оператор /^-/ ). Далее оператор if проверяет содержимое переменной $_ на соответствие известным опциям. Функция shift удаляет из массива @ARGV первое значение, сдвигая оставшиеся в нём элементы влево.

Дмитрий Карпов
Дмитрий Карпов
Россия, Нижний Новгород
Олег Корсак
Олег Корсак
Латвия, Рига