Рейтинг блогов

VB - работа с файлами

дата добавления: 03 мая 2003 / 19:04, просмотров: 59134, комментариев: 29
Еще одна моя старенькая статейка на тему работы с текстовыми файлами средствами Visual Basic 6.0.

 

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

В данной статье речь пойдет о работе с текстовыми файлами средствами Visual Basic.

 

Дескриптор файла

 

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

 

В Visual Basic существует функция FreeFile, которая возвращает номер свободного канала, который можно использовать для работы с файлом. Если свободных каналов нет, то возникает ошибка.

 

FreeFile [ (RangeNumber) ]

 

RangeNumber -необязательный параметр, который позволяет определить диапазон значений свободных каналов, если RangeNumber = 0 (по умолчанию), то возвращается номер канала из диапазона 1 - 255, а если 1, то из диапазона 256 - 511.

 

Пример:

 

MyFile = FreeFile ' Переменной MyFile присвоен свободный канал и теперь ее можно использовать для работы с файлами

 

Работа с текстовыми файлами

 

Наиболее часто приходится встречаться с текстовыми файлами. Текстовые файлы состоят из набора символов ASCII (American Standard Code for Information Interchange - Американский стандартный код для обмена информацией).

 

Прежде чем начать записывать/считывать данные, файл необходимо открыть, делается это при помощи оператора Open (Имя_файла) For [Input | Output | Append] As #Номер_файла, где:

 

Input - открыть файл для чтения, если файл не существует, то возникает ошибка;

Output - для записи, если файл не существует, то он будет создан, а если файл существует, то он будет перезаписан;

Append - для добавления, если файл не существует то он будет создан, а если файл существует, то данные будут добавляться в конец файла.

 

Чтение текстовых файлов можно производить двумя способами: читать посимвольно, для этого используется функция Input(Количество_считываемых_символов, #Номер_файла) и построчно, для этого используется функция Line Input #Номер_файла, Куда_считывать.

 

Например, если надо считать первую строку из какого-нибудь файла в переменную S, то код будет таким:

 

Dim MyFile 'Объявляем переменную для свободного файла

Dim S As String 'Переменная для хранения считанных данных

 

MyFile = FreeFile ' Присваиваем свободный канал, для работы с файлами

Open ("C:TEST.txt") For Input As #MyFile 'Открываем файл TEST.TXT для чтения

Line Input #MyFile, S 'Считываем первую строку из файла TEST.TXT в переменную S

Close #MyFile 'Закрываем файл

 

Если, например, надо считать не первую, а пятую строку, то код будет немного другой:

 

Dim MyFile 'Объявляем переменную для свободного файла

Dim i As Integer 'Переменная для цикла

Dim tS As String 'Переменная для считывания строк

Dim S As String 'Переменная для хранения окончательных данных

 

MyFile = FreeFile ' Присваиваем свободный канал, для работы с файлами

Open ("C:TEST.txt") For Input As #MyFile 'Открываем файл TEST.TXT для чтения

 

For i = 1 To 5

Line Input #MyFile, tS 'Читаем файл TEST.TXT построчно

If i => 5 Then S = tS 'Если пятая строка, то запоминаем ее в переменную S

Next i

Close #MyFile 'Закрываем файл

 

А если надо считать все данные из файла, то:

 

Dim MyFile 'Объявляем переменную для свободного файла

Dim S As String 'Переменная для хранения считанных данных

 

MyFile = FreeFile ' Присваиваем свободный канал, для работы с файлами

Open ("C:TEST.txt") For Input As #MyFile 'Открываем файл TEST.TXT для чтения

S = Input$(LOG(1), 1) 'Считываем весь файл в переменную S

Close #MyFile 'Закрываем файл

 

Для записи в файл существуют операторы Print #Номер_файла, Данные и Write #Номер_файла, Данные. Отличает эти операторы только то, что Write записывает данные в кавычках, а Print без кавычек.

 

Ниже следующий код создаст на диске C: новый файл TEST.TXT и запишет в него две строки, первую без кавычек, а вторую в кавычках:

 

Dim MyFile 'Объявляем переменную для свободного файла

 

MyFile = FreeFile ' Присваиваем свободный канал, для работы с файлами

Open ("C:TEST.txt") For Output As #MyFile 'Открываем файл TEST.TXT для записи

Print #MyFile, "Эта строка записана оператором Print, она без кавычек…"

Write #MyFile, "Эта строка записана оператором Write, она в кавычках…"

Close #MyFile 'Закрываем файл

 

Вот собственно и все. Как вы уже наверно поняли, для закрытия файла служит оператор Close #Номер_файла, при этом, #Номер_файла указывать не обязательно.

 

The End

 

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

Комментарии (всего: 29)

Добавить комментарий rss
Автор: thelv @ 08 октября 2007, 03:50   ·   ссылка
Спасибо- просто и ясно.
Автор: makSuS @ 10 января 2008, 19:22   ·   ссылка
можно ли с помошью этого кода дописовать текст в конец файла, а не стирать предыдущий и писать указанный?
Автор: Алексей Немиро @ 11 января 2008, 03:48   ·   ссылка
Можно, для этого нужно использовать ключевое слово Append:
Dim MyFile As Long
MyFile = FreeFile
Open ("C:TEST.txt") For Append As #MyFile
Print #MyFile, "test1"
Write #MyFile, "test2"
Close #MyFile
Автор: makSuS @ 14 января 2008, 19:08   ·   ссылка
Dim MyFile As Long
MyFile = FreeFile
Open ("C:TEST.txt") For Append As #MyFile
Print #MyFile, "Привет"; vbNewLine; "Привет"
Close #MyFile

данный код напишет слово "Привет" в 2 строках, но если писать длинный код (надо много новых абзацев делать) то текст попросту не уменьшается! можно ли перенести код на 2 строку?
Автор: Алексей Немиро @ 15 января 2008, 03:58   ·   ссылка
Print #MyFile, "Привет1"
Print #MyFile, "Привет2"
Print #MyFile, "Привет3"
Print #MyFile, "Привет4"
Print #MyFile, "Привет5"
Print #MyFile, "Привет6"
Print #MyFile, "Привет7"
или, берем TextBox, у которого свойство Multiline = True:
Print #MyFile, TextBox1.Text
Автор: Баха @ 26 марта 2008, 14:14   ·   ссылка
Привет Алексей!
У меня для Вас такой вопрос.
Задача такая.
Данна текст надо разделить его по словам.
Например: Добро пожаловать на мой сайт.
Программа должна вывести:
Добро
пожаловать
на
мой
сайт.

Спасибо заранее за помошь.
Автор: Алексей Немиро @ 28 марта 2008, 16:19   ·   ссылка
Dim i As Integer
Dim arr()
arr = Split("Добро пожаловать на мой сайт.")

For i = 0 To UBound(arr) - 1
 Print arr(i)
Next i
Автор: Алексей Немиро @ 28 марта 2008, 16:24   ·   ссылка
совсем забыл, функция Split еще может принимать второй параметр, который указывает сивол - разделитель, например:
Dim arr()
arr = Split("Превед, медвед!", "д")

данны пример возвратит массив:
Преве
, ме
ве
!
Автор: Namatjira @ 29 марта 2008, 08:49   ·   ссылка
А как удалить конкретную строку? Есть ли у Вас подобная статья для текстовых файлов произвольного доступа?
Автор: <R@f> @ 07 июля 2008, 03:04   ·   ссылка
У меня такой вопрос.

Я умею добавлять свой текст в конец файла(например в *.exe)
открывая его блокнотом мой текст виден в конце.
Как удалить свой текст (в конце файла), не убив при этом сам экзешник.
Сколько не пробовал, приложение ломается... :(
Страницы: 1 · 2 · 3

Добавить комментарий

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учётная запись на этом сайте, пройдите процудуру авторизации.
В противном случае, зарегистрируйтесь на сайте.