ОБРАБОТКА ТЕКСТОВЫХ ФАЙЛОВ В СРЕДЕ 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

PDF