СПО в российских школах

Команда ALT Linux рассказывает о внедрении свободного программного обеспечения в школах России
Февраль 18, 2011

BASIC-256. Глава 16

Методические материалы
Автор: Владимир Черный

Продолжаем публиковать перевод книги Джеймса Рено. Эту главу перевел Владимир Черный.
Оглавление:

Где взять BASIC-256

Глава 16 Файлы. Сохраним информацию на будущее

Мы исследовали оперативную память компьютера с помощью переменных и массивов, но как сохранить данные надолго? Существует много разных способов долгосрочного хранения данных.

BASIC-256 поддерживает запись и чтение информации из файлов на вашем жестком диске. Этот процесс ввода и вывода информации часто обозначают I/O1.

Эта глава покажет как читать данные из файла и как их потом туда записывать для долгосрочного хранения.

Чтение строк из файла

В первой программе этой главы вы увидите много новых операторов и констант (постоянных) которые нужны для управления данными.

 1 # readfile.kbs
 2 input "имя файла>", fn$
 3 if not exists(fn$) then
 4     print fn$ + " не существует."
 5     end
 6 end if
 7 #
 8 n = 0
 9 open fn$
10 while not eof
11     l$ = readline
12     n = n + 1
13     print n + " " + l$
14 end while
15 #
16 print "Файл " + fn$ + " содержит " + size + " байт."
17 close

Программа 90 Чтение строк из файла

имя файла>test_ru.txt
1 Настало время испытать
2 силу человеческой души!
3 - Томас Пейн
Файл test_ru.txt содержит 110 байт.

Пример вывода программы 90 Чтение строк из файла

exist(выражение)

Ищет на компьютере файл, имя которого определено переменной выражение. Имя диска2 и путь должны быть указаны, как часть имени файла. Если они опущены, происходит поиск по текущему рабочему каталогу.

Возвращает true (истина или 1) если файл существует и false (ложь или 0) в противном случае.

openвыражение
open (выражение)
open номер_файла, выражение
open (номер_файла, выражение)

Открывает указанный переменной выражение файл, задавая ему указанный номер_файла. Если файл не существует, создается новый файл так, что в него можно добавлять информацию (см. операторы write и writeln). Не забудьте выполнить команду close, когда ваша программа закончит работать с файлом.

BASIC-256 может открыть одновременно не более восьми (8) файлов с номерами от 0 до 7. Если номер файла не указан, он открывается с номером нуль (0).

eof
eof ()
eof(номер_файла)

Функция eof возвращает истину (true) если достигнут конец файла в процессе чтения и ложь (false) в если еще есть не прочтенные данные.

Если номер_файла не указан используется значение нуль (0).

readline
readline ()
readline (номер_файла)

Возвращает прочитанную из файла строку. Если достигнут конец файла [eof(номер_файла)=true], тогда функция возвращает пустую строку ("")

Если номер_файла не указан используется значение нуль (0).

size
size ()
size(номер_файла)

Возвращает длину файла в байтах.

Если номер_файла не указан используется значение нуль (0).

close
close ()
close(номер_файла)

Функция close закрывает ввод/вывод в файл и позволяет другому файлу использовать тот же номер.

Если номер_файла не указан используется значение нуль (0).

Запись строк в файл

В программе 90 мы видели, как читать информацию из файла. Следующие две программы демонстрируют различные варианты записи информации в файл. В программе 91 мы открываем файл для записи стирая всю имеющуюся там ранее информацию, а в программе 92 добавляем новые строчки в конец файла, сохраняя предыдущую информацию.


 1 # resetwrite.kbs
 2 open "resetwrite.dat"
 3
 4 print "введите пустую строку для завершения записи"
 5
 6 # стираем данные из файла (reset) и начинаем туда писать сначала
 7 reset
 8 repeat:
 9 input ">", l$
10 if l$ <> "" then
11     writeline l$
12     goto repeat
13 end if
14
15 # переходим к началу файла и отображаем содержимое
16 seek 0
17 k = 0
18 while not eof()
19     k = k + 1
20     print k + " " + readline()
21 end while
22
23 close
24 end

Программа 91 Очищение файла и запись.

введите пустую строку для завершения записи
>Вот простая информация
>которую я записал в файл
>раз, два, три, четыре пять
>Я иду искать!
>
1 Вот простая информация
2 которую я записал в файл
3 раз, два, три, четыре пять
4 Я иду искать!

Пример вывода программы 91 Очищение файла и запись.

reset
reset ()
reset номер_файла
reset (номер_файла)

Стирает все данные в открытом файле, и перемещает указатель файла на начало.

Если номер_файла не указан, используется нулевой номер (0).

seekвыражение
seek(выражение)
seek номер_файла, выражение
seek(номер_файла, выражение)

Перемещает указатель чтения или записи файла в указанную позицию. Для перемещения указателя в начало файла используйте значение нуль (0). Для перемещения указателя в конец файла используйте значение функции size().

Если номер_файла не указан, используется нулевой номер (0).

writelineвыражение
writeline(выражение)
writeline номер_файла, выражение
writeline (номер_файла, выражение)

Записывает значение аргумента выражение в открытый файл и добавляет символ конца строки. Указатель файла перемещается в конец записи так, что следующая команда записи запишет данные непосредственно за этими.

Если номер_файла не указан, используется нулевой номер (0).


 1 # appendwrite.kbs
 2 open "appendwrite.dat"
 3
 4 print "введите пустую строку для завершения записи"
 5
 6 # перемещаем указатель файла в конец и добавляем записи
 7 seek size
 8 repeat:
 9 input ">", l$
10 if l$ <> "" then
11     writeline l$
12     goto repeat
13 end if
14
15 # перемещаем указательк началу файла, чтобы вывести его содержимое
16 seek 0
17 k = 0
18 while not eof()
19     k = k + 1
20     print k + " " + readline()
21 end while
22
23 close
24 end

Программа 92 Дописываем строчки в файл

введите пустую строку для завершения записи
>sed sed sed
>vim vim vim
>

1 bar bar bar
2 foo foo foo
3 grap grap grap
4 sed sed sed
5 vim vim vim

Пример вывода программы 92 Дописываем строчки в файл

Функция read() и оператор write

В первых трех программах этой главы мы обсуждали функцию readline() и оператор writeline. Вот еще два других способа читать из файла и писать в файл: функция read() и оператор write.

read
read ()
read (номер_файла)

Читает следующее слово или число (токен) из файла. Токены отделяются друг от друга пробелом, табуляцией или символом конца строки. Множественные пробельные элементы воспринимаются как один.

Если номер_файла не указан, используется нулевой номер (0).

write выражение
write (выражение)
write номер_файла, выражение
write (номер_файла, выражение)

Записывает значение аргумента выражение в открытый файл и не добавляет символ конца строки.

Если номер_файла не указан, используется нулевой номер (0).

Эта программа использует простой текстовый файл имитируя телефонную записную книжку.


 1 # phonelist.kbs
 2 # Добавляем номер телефона в список и показываем
 3 filename$ = "phonelist.txt"
 4
 5 print "phonelist.kbs - Управление списком телефонов."
 6 do
 7 input "Добавить, Посмотреть, Закончить (a/l/q)?",action$
 8 if left(lower(action$),1) = "a" then gosub addrecord
 9 if left(lower(action$),1) = "l" then gosub listfile
10 until left(lower(action$),1) = "q"
11 end
12
13 listfile:
14 if exists(filename$) then
15     # отображаем список имен и телефонов из файла
16     open filename$
17     print "Файл имеет размер " + size + " байт"
18     while not eof
19         # читаем следующую строки из файла и печатаем ее
20         print readline
21     end while
22     close
23 else
24     print "В файле нет записей. Добавьте первую."
25 end if
26 return
27
28 addrecord:
29 input "Имя?", name$
30 input "Номер телефона?", phone$
31 open filename$
32 # ищем конец файла
33 seek size()
34 # мы достигли конца файла, - добавляем строку
35 writeline name$ + ", " + phone$
36 close
37 return

Программа 93 Большая программа — Телефонная книжка

phonelist.kbs - Управление списком телефонов.
Добавить, Посмотреть, Закончить (a/l/q)?l
Файл имеет размер 76 байт
Аня, 555-5555
Валя, 555-7777
Дима, 555-3333
Паша, 555-0987
Петя, 234-3445
Добавить, Посмотреть, Закончить (a/l/q)?a
Имя?Вася
Номер телефона?345-4556
Добавить, Посмотреть, Закончить (a/l/q)?l
Файл имеет размер 95 байт
Аня, 555-5555
Валя, 555-7777
Дима, 555-3333
Паша, 555-0987
Петя, 234-3445
Вася, 345-4556
Добавить, Посмотреть, Закончить (a/l/q)?q

Пример вывода программы 93 Большая программа — Телефонная книжка

—————————————————
1 I/O — от английских слов Input (ввод) и Output (вывод)

2Имя диска имеет смысл только на операционных системах WindowsTM (прим. редактора)

============================

Где скачать BASIC-256:

Для дистрибутивов ALT Linux

Windows версия
http://basic256.org (http://www.sourceforge.net/projects/kidbasic)

Как установить BASIC-256 в Linux

Для Альт Линукс: настроить репозиторий и обновить/установить пакет через synaptic или apt
Для rpm-based дистрибутивов: rpm -Uvh <имя_пакета>.rpm

Оставьте комментарий