ОБРАБОТКА ТЕКСТОВЫХ ФАЙЛОВ В СРЕДЕ GAMBAS
Раздел: Разработка методического обеспечения
Журнал: Мониторинг успеваемости и качества знаний обучающихся
5 апреля 2011 г.
Авторы: Буяковская Ирина Александровна
И. А. Буяковская
ОБРАБОТКА ТЕКСТОВЫХ ФАЙЛОВ В СРЕДЕ GAMBAS
Достаточно часто при решении задач необходимо не только производить чтение содержимого исходного файла, но и вносить изменения. Рассмотрим на примере следующей задачи некоторые особенности обработки файлов.
Задача 1. Имеется два текстовых файла с одинаковым числом строк. Переписать с сохранением порядка следования строки первого файла во второй, а строки второго файла - в первый.
Создайте проект. На форме расположите следующие объекты: две кнопки «Решение» и «Выход», три объекта Label (в первом расположите условие задачи, а два оставшихся для вывода исходного содержимого файлов). Далее приведен программный код решения задачи:
PUBLIC SUB Button1_Click()
DIM F1, F2 AS File
DIM s, s1, s2, s3 AS String
F1 = OPEN "/home/student/file1.txt" FOR READ
' Связываем файловую переменную и физический файл, причем открываем его только для чтения.
F2 = OPEN "/home/student/file2.txt" FOR READ
s1 = ""
' Данная переменная будет включать все содержимое первого файла, а следующая второго.
s3 = ""
Label1.Text = ""
Label2.Text = ""
WHILE NOT Eof(F1)
' Исходя из условия задачи, так как длина файлов одинаковая, то можно производить поиск признака конца первого файла в данном цикле, но считывать одновременно из двух.
LINE INPUT #F1, s
s1 = s1 & s & Chr(10)
' После считывания одной строки из исходного файла в переменную s, мы добавляем её содержимое и признак перехода на следующую строку. Данная операция будет производиться до тех пор, пока файл не будет закончен. Поэтому после выхода из цикла в переменной s1 будет полностью записано содержимое первого файла.
LINE INPUT #F2, s2
s3 = s3 & s2 & Chr(10)
WEND
Label1.Text = s1
Label2.Text = s3
F1 = OPEN "/home/student/file1.txt" FOR CREATE
' Для того чтобы переписать новое содержимое в файл создаем его для записи и аналогично поступаем со вторым файлом.
F2 = OPEN "/home/student/file2.txt" FOR CREATE
WRITE #F1, s3
WRITE #F2, s1
CLOSE #F1
CLOSE #F2
END
Задача 2. Дан текстовый файл. Создать новый, который будет содержать информацию о количестве знаков препинания каждой строки исходного файла .
PUBLIC SUB Button1_Click()
DIM F1, F2 AS File, k, i AS Integer, s, sp AS String
F1 = OPEN "Lab1" FOR INPUT
F2 = OPEN "/home/student/Lab1_create.txt" FOR WRITE CREATE
sp = "./;:'!,-"
' Создадим переменную, содержащую знаки препинания поиск которых будем производить в тексте файла.
WHILE NOT Eof(F1)
LINE INPUT #F1, s
k = 0
Label2.Text = Label2.Text & s & Chr(10)
i = 1
WHILE i <= Len(s)
IF InStr(sp, Mid(s, i, 1)) > 0 THEN k = k + 1
' В данном цикле проверим каждый символ считанной из файла строки. С помощью условия мы проверяем является ли позиция текущего символа в строке со знаками препинания отличной от нуля и, соответственно, считаем их количество.
i = i + 1
WEND
WRITE #F2, k
' Записываем в новый файл количество знаков препинания текущей строки и выводим результат на форму.
Label3.Text = Label3.Text & k & Chr(10)
WEND
END
Задача 3. В исходном текстовом файле найти самую длинную строку.
PUBLIC SUB Button1_Click()
DIM F1 AS File, s, mxs AS String
F1 = OPEN "lab2" FOR INPUT
mxs = ""
' Для того, чтобы определить самую длинную строку заведем переменную mxs. Её начальное значение будет равно самой короткой строке - пустой.
WHILE NOT Eof(F1)
LINE INPUT #F1, s
IF Len(s) > Len(mxs) THEN mxs = s
' Если длина считанной из файла строки окажется по длине больше, чем строка, содержащаяся в переменной mxs, то данную строку мы запишем в эту переменную.
Label2.Text = Label2.Text & s & Chr(10)
WEND
Label3.Text = mxs
END