Россия |
Буферизированный (потоковый) ввод-вывод. Часть III
8.2.3. Ввод-вывод средствами языка Basic
Для операций файлового ввода-вывода используются операторы, описание которых представлено в Приложении №III (п. 8.6 данной лекции).
Примеры функций на языке Quick Basic, реализующие форматированный вывод строки в файл и чтение её из файла, приведены ниже:
Пример 8.7.
REM ФАЙЛ EX08007.BAS REM ЗАПИСЬ ЗНАЧЕНИЯ В ТЕКСТОВЫЙ ФАЙЛ REM REM ДАННЫЙ ПРИМЕР ТЕСТИРОВАЛСЯ В СИСТЕМЕ ПРОГРАММИРОВАНИЯ REM QUICK BASIC MICROSOFT WINDOWS 98 REM REM ИНИЦИАЛИЗАЦИЯ ICSIZE% = 5 REM ОТКРЫВАЕМ ТЕКСТОВЫЙ ФАЙЛ OPEN "tempfile.txt" FOR OUTPUT AS #1 REM ВВОД С КОНСОЛИ ТЕКСТОВОЙ СТРОКИ PRINT "Введите строку из "; ICSIZE%; " символов :"; INPUT INITSTR$ REM ПРОВЕРКА ДЛИНЫ ВВЕДЁННОЙ СТРОКИ INITSTR% = LEN(INITSTR$) IF INITSTR% <= ICSIZE% THEN RESSTR$ = INITSTR$ ELSE RESSTR$ = LEFT$(INITSTR$, ICSIZE%) END IF REM ВЫВОД ВВЕДЁННОЙ СТРОКИ ТЕКСТА PRINT #1, RESSTR$ REM ЗАКРЫТИЕ ФАЙЛА И ЗАВЕРШЕНИЕ РАБОТЫ CLOSE #1 INPUT "Press key Enter to Exit...", JUNK STOP END
Пример 8.8.
REM ФАЙЛ EX08008.BAS REM ЧТЕНИЕ ЗНАЧЕНИЯ ИЗ ТЕКСТОВОГО ФАЙЛА REM REM ДАННЫЙ ПРИМЕР ТЕСТИРОВАЛСЯ В СИСТЕМЕ ПРОГРАММИРОВАНИЯ REM QUICK BASIC MICROSOFT WINDOWS 98 REM REM ИНИЦИАЛИЗАЦИЯ ICSIZE% = 5 REM ОТКРЫВАЕМ ТЕКСТОВЫЙ ФАЙЛ OPEN "tempfile.txt" FOR INPUT AS #1 REM ЧТЕНИЕ СТРОКИ ИЗ ФАЙЛА LINE INPUT #1, INITSTR$ REM ПРОВЕРКА ДЛИНЫ ВВЕДЁННОЙ СТРОКИ INITSTR% = LEN(INITSTR$) IF INITSTR% <= ICSIZE% THEN RESSTR$ = INITSTR$ ELSE RESSTR$ = LEFT$(INITSTR$, ICSIZE%) END IF REM ВЫВОД СТРОКИ ТЕКСТА PRINT "Значение строки в файле: "; PRINT RESSTR$ REM ЗАКРЫТИЕ ФАЙЛА И ЗАВЕРШЕНИЕ РАБОТЫ CLOSE #1 INPUT "Press key Enter to Exit...", JUNK STOP END
8.2.4. Ввод-вывод средствами языков Perl и Python
Функции файлового ввода-вывода на языке Perl описаны в пункте 6.2.4 "Буферизированный (потоковый) ввод-вывод" и 7.1.4 "Буферизированный (потоковый) ввод-вывод. Часть II" данного курса. Описание функций открытия и закрытия дескрипторов файлов в Perl приведены в приложении №4 (пункт 8.7. данной лекции). Здесь же автор приводит примеры файлового ввода-вывода на языке Perl:
Пример 8.9
#!perl -w # File ex08009.pl # Данная функция вводит с клавиатуры строку длиной # не более 5 символов и записывает эту строку # в файл tempfile.txt в текущем каталоге # # Данный пример тестировался компилятором # ActiveState Perl 5.8.0 # # Инициализация: $icsize = 5; # Открытие файла и чтение строки open( STREAM, ">", "tempfile.txt" ); print "\nВведите строку текста (не более $icsize символов): "; $initstr = <STDIN>; # Обрезание строки слева на $icsize символов $str = substr $initstr, 0, $icsize; # Вывод в файл и его закрытие print STREAM $str; close( STREAM ); # Завершение работы print STDERR "\nPress key Enter to Exit..."; $junk = <STDIN>; # Конец файла
Пример 8.10
#!perl -w # File ex08010.pl # Данная функция вводит из файла tempfilе.txt в текущем каталоге # строку длиной, обрезает её до длины не более 5 символов # и выводит эту строку на экран # # Данный пример тестировался компилятором # ActiveState Perl 5.8.0 # # Инициализация: $icsize = 5; # Открытие файла и чтение строки open( STREAM, "<", "TEMPFILE.TXT" ); # read( STREAM, $initstr, $icsize ); $initstr = <STREAM>; # Обрезание строки слева на $icsize символов $resstr = substr $initstr, 0, $icsize; # Вывод в файл и его закрытие print "\nСтрока, записанная в файл: $resstr"; close( STREAM ); # Завершение работы print STDERR "\nPress key Enter to Exit..."; $junk = <STDIN>; # Конец файла
Функции файлового ввода-вывода на языке Python описаны в пункте 6.2.5 "Буферизированный (потоковый) ввод-вывод" и 7.1.5 "Буферизированный (потоковый) ввод-вывод. Часть II" данного курса. Описание функций открытия и закрытия дескрипторов файлов в Python приведены в приложении №5 (пункт 8.8. данной лекции). Здесь же автор приводит примеры файлового ввода-вывода на языке Python:
Пример 8.11
#! %PYTHON%/python # -*- coding: cp866 -*- # File ex08011.py # Данная функция вводит с клавиатуры строку длиной # не более 5 символов и записывает эту строку # в файл tempfile.txt в текущем каталоге # # Данный пример тестировался компилятором # ActiveState Python 2.5 # def ex08011(): # Инициализация: icsize = 5 # Открытие файла и чтение строки stream = open( "tempfile.txt", "w" ) print 'Введите строку длиной не более %2d символов: ' % icsize, initstr = raw_input() # Обрезание прочтённой строки до icsize символов с начала resstr = initstr[0:icsize] # Вывод получившейся строки в файл и закрытие потока stream.write( resstr ) stream.close() # Завершение работы junk = raw_input( 'Press key Enter to Exit...') # Конец файла
Пример 8.12
#! %PYTHON%/python # -*- coding: cp866 -*- # File ex08012.py # Данная функция вводит из файла tempfile.txt в текущем каталоге # строку длиной, обрезает её до длины не более 5 символов # и выводит эту строку на экран # # Данный пример тестировался компилятором # ActiveState Python 2.5 # def ex08012(): # Инициализация: icsize = 5 # Открытие файла и чтение строки stream = open( "tempfile.txt", "r" ) initstr = stream.read( icsize ) # Обрезание прочтённой строки до icsize символов с начала # (Здесь этот оператор лишний) resstr = initstr[0:icsize] stream.close() # Вывоз строки из файла на экран print 'Строка, записанная в файл: ', print resstr # Завершение работы junk = raw_input( 'Press key Enter to Exit...') # Конец файла
8.2.5. Ввод-вывод средствами языка Turbo Prolog
Для ввода-вывода строк в тестовый файл средствами Turbo Prolog чаще всего используется file_str, однако встречаются и другие функции. Их описания смотри в приложении №6 (пункт 8.9. данной лекции).
Примеры реализации алгоритмов ввода-вывода в текстовые файлы на языке Prolog.
Пример 8.13.
/* Файл ex08013.pro */ /* Данный пример тестировался в системе программировани Turbo Prolog 2.0 */ domains /* Описываем переменные */ Icsize, Ilen = integer Initstr, Resstr = string predicates /* Определяем правила */ icsize( Icsize ) trunk( Icsize, Initstr, ResStr ) clauses /* Определяем правила */ /* Инициализация переменных */ icsize( Icsize ) :- Icsize = 5. /* Предикат, обрезающий строку InitStr до IcSize, если это необходимо */ trunk( Icsize, Initstr, Resstr ) :- str_len( Initstr, Ilen ), Ilen < Icsize, Resstr = Initstr,!. trunk( Icsize, Initstr, Resstr ) :- str_len( Initstr, Ilen ), Ilen >= Icsize, frontstr( Icsize, Initstr, Resstr, _ ),!. goal /* Вывод текста Приглашения */ icsize(Icsize), writef( "\nВведите строку длиной не более %d символов: ", Icsize ), /* Ввод строки */ readln ( Initstr ), /* Обрезание строки до 5 символов */ trunk( Icsize, Initstr, Resstr ), /* Вывод строки в файл */ file_str("TEMPFILE.TXT", Resstr), /* Вывод завершающей надписи */ write( "Press key Enter to exit..." ), readchar( _ ). /* Конец программы */
Пример 8.14.
/* Файл ex08014.pro */ /* Данный пример тестировался в системе программировани Turbo Prolog 2.0 */ domains /* Описываем переменные */ Icsize, Ilen = integer Initstr, Resstr = string predicates /* Определяем правила */ icsize( Icsize ) trunk( Icsize, Initstr, ResStr ) clauses /* Определяем правила */ /* Инициализация переменных */ icsize( Icsize ) :- Icsize = 5. /* Предикат, обрезающий строку InitStr до IcSize, если это необходимо */ trunk( Icsize, Initstr, Resstr ) :- str_len( Initstr, Ilen ), Ilen < Icsize, Resstr = Initstr,!. trunk( Icsize, Initstr, Resstr ) :- str_len( Initstr, Ilen ), Ilen >= Icsize, frontstr( Icsize, Initstr, Resstr, _ ),!. goal /* Ввод строки из файла */ file_str("TEMPFILE.TXT", Initstr), icsize(Icsize), /* Обрезание строки до 5 символов */ trunk( Icsize, Initstr, Resstr ), /* Вывод текста строки */ writef( "\nСтрока, записанная в файл: %s.", Resstr ), /* Вывод завершающей надписи */ write( "Press key Enter to exit..." ), readchar( _ ). /* Конец программы */
8.2.6. Ввод-вывод средствами языка Visual Basic Script
Для вывода строк в тестовый файл средствами Java чаще всего используется класс PrintWriter, а для чтения данных из текстового файла - файл BufferedReader. Их описания смотри в приложении №7 (пункт 8.10. данной лекции).
Примеры реализации алгоритмов ввода-вывода в текстовые файлы на языке Java
Пример 8.15.
/* File ex08015.java */ /* Функция реализует простейший пример ввода данных с клавиатуры и записи их в файл */ /* Данный пример требует наличие компилированного класса SavitchIn */ /* Данный пример тестировался в системе программировани Sun Java J2EE SDK версии 1.6 */ import java.io.*; import java.util.*; // Файл ex08015.java public class ex08015 { public static void main( String[] args ) { /* Определение переменных */ int icsize; String Initstr, Resstr, junk; PrintWriter outStream = null; /* Начало диалога (ввод данных пользователя */ System.out.print("Введите строку (не более 5 символов): "); Initstr = SavitchIn.readLine(); /* Проверка условия и вывод диалога */ icsize = Initstr.length(); if( icsize <=5 ) Resstr = Initstr; else Resstr = Initstr.substring(0,5); try { outStream = new PrintWriter( new FileOutputStream( "TEMPFILE.TXT" )); } catch( FileNotFoundException e ) { System.out.println( "Ошибка открытия файла: TEMPFILE.TxT" ); /* Завершение работы программы */ System.out.println( "Press key Enter to exit..." ); junk = SavitchIn.readLine(); System.exit(0); } outStream.println( Resstr ); outStream.close(); /* Завершение работы программы */ System.out.println( "Press key Enter to exit..." ); junk = SavitchIn.readLine(); } }Листинг .
Пример 8.16.
/* File ex08016.java */ /* Функция реализует простейший пример ввода данных с клавиатуры и записи их в файл */ /* Данный пример требует наличие компилированного класса SavitchIn */ /* Данный пример тестировался в системе программировани Sun Java J2EE SDK версии 1.6 */ import java.io.*; import java.util.*; // Файл ex08016.java public class ex08016 { public static void main( String[] args ) { /* Определение переменных */ int icsize; String Initstr, Resstr, junk; BufferedReader inpStream = null; /* Открытие текстового файла */ /* Ввод строки символов из файла */ try { inpStream = new BufferedReader( new FileReader( "TEMPFILE.TXT" )); Initstr = inpStream.readLine(); /* Проверка условия и вывод строки из файла */ icsize = Initstr.length(); if( icsize <=5 ) Resstr = Initstr; else Resstr = Initstr.substring(0,5); System.out.print( "Введённая из файла строка: " ); System.out.println( Resstr ); /* Завершение работы программы */ System.out.println( "Press key Enter to exit..." ); junk = SavitchIn.readLine(); } catch( FileNotFoundException e ) { System.out.println( "Ошибка открытия файла: TEMPFILE.TXT; " ); System.out.println( "Или файл не найден." ); /* Завершение работы программы */ System.out.println( "Press key Enter to exit..." ); junk = SavitchIn.readLine(); System.exit(0); } catch( IOException e ) { System.out.println( "Ошибка чтения данных из файла: TEMPFILE.TXT; " ); /* Завершение работы программы */ System.out.println( "Press key Enter to exit..." ); junk = SavitchIn.readLine(); System.exit(0); } } }Листинг .
8.3. Резюме потокового вывода
Итак, вы прослушали заключительную часть лекции по потоковому выводу в файлы и ввода данных из файлов. Теперь Вы можете писать любые программы для консоли (с интерфейсом CLI, "Command Line Interface", по терминологии Linux), а именно фильтры, консольные просмотрщики файлов, утилиты командной строки, макросы и скрипты на языках оболочки ("Shell"). Более того, Вы сможете писать "почти настоящие программы" на языке командной оболочки Вашей операционной системы!
Однако Вы заметили, что в этом курсе "чего-то не хватает", а именно - ввод вывод с использованием API разных программ, и прежде всего - WinAPI. В следующих лекциях автор попытается исправить эти пробелы в курсе.