Робота з текстовими файлами в Visual Basic. h2>
Зовсім
недавно в непомню який коференції я бачив запис якогось чоловіка, який
просив, щоб хоч хто-небудь пояснив йому елементарну роботу з файлами ...
Здавалося б таке просте ... Але це просте для тих, хто вже хоч трохи
просунувся в програмуванні, а хто це тільки почав? Це ж, дійсно,
непрохідний ліс! І я сильно сумніваюся, щоб хто-небудь з інших наших
Web-майстрів коли-небудь приділить цього хоч якусь увагу. Тому цим
займусь і я спробую в цій статті показати тільки основи. p>
1. Відкриття файлу для читання інформації з нього. h2>
Отже,
щоб безпроблемно працювати з текстовими файлами спочатку їх потрібно відкрити. Робиться
це за допомогою оператора Open, наприклад: p>
Open
"c: text.txt" For Input As # 1 p>
Зверніть
увагу на режим відкриття файлу - Input (для читання). Тут файл text.txt
відкривається для зчитування під номером 1. Увага! Номер файлу --
обов'язковий параметр, і вводити його потрібно завжди! Якщо ваша програма буде
мати справу не з одним десятком відкритих файлів, то встежити за їх нумерацією
буде важкувато. Використовуйте для цього функцію FreeFile. Вона повертає ще не
зайнятий номер (від 1 до 511) для файла: p>
Dim FileNum As Integer p>
FileNum = FreeFile p>
Open "c: text.txt" For
Input As FileNum p>
Так,
файл відкрили! Тепер з нього потрібно що-небудь вважати. Оператор Line Input
зчитує з відкритого файлу по одному рядку при кожному виклику. Тому для
зчитування з файлу потрібно побудувати цикл, який би викликав цей оператор до
тих пір, поки не дійшов би до кінця файлу: p>
цикл
виконується, поки кінець файлу не досягнуть p>
Do
Until EOF (FileNum) p>
при кожному виклику оператора Line Input він
записує в p>
змінну новою рядок p>
Line Input # FileNum, мінлива p>
Loop
p>
Закрити
відкритий файл можна оператором Close # FileNum. А тепер ось як це має
виглядати в практиці: p>
Dim FileNum As Integer p>
Dim txt As String p>
Dim alltxt As String p>
FileNum = FreeFile p>
відкриваємо файл у режимі читання p>
Open "c: text.txt" For
Input As FileNum p>
запускаємо вищезгаданий цикл p>
Do
Until EOF (FileNum) p>
зчитуємо
рядок з файлу з номером FileNum і кладемо її в p>
змінну txt p>
Line Input # FileNum, txt p>
тепер
до змінної alltxt додаємо вміст змінної txt - p>
рядка
і vb-константу vbCrLf (Chr (13) + Chr (10)), тому що кожен рядок p>
повинна
бути з нового рядка :-) p>
alltxt
= Alltxt + txt + vbCrLf p>
Loop
p>
закриваємо
файл з номером FileNum p>
Close
# FileNum p>
виводимо
вміст змінної alltext p>
MsgBox
alltxt p>
2. Відкриття файлу для запису інформації в нього. h2>
Записати
інформацію в файл ще простіше! Ця операція відрізняється від попередньої тільки тим, що відкрити файл
треба в режимі запису: p>
Open "c: text.txt" For
Output As FileNum p>
і
замість циклу потрібно вставити оператор Print #, що записує в файл
вміст змінної: p>
Print # FileNum, "Азбука Visual Basic" p>
або p>
Print # FileNum, alltext p>
Приклад: p>
Dim FileNum As Integer p>
Dim txt As String p>
FileNum = FreeFile p>
txt =
"http://members.tripod.de/cmvb" p>
відкриваємо файл у режимі запису p>
Open "c: text.txt" For
Output As FileNum p>
Print
# FileNum, txt p>
закриваємо
файл з номером FileNum p>
Close
# FileNum p>
перевірки
вміст файлу. p>
І
ще хочу запропонувати другий спосіб запису інформації у файл - за допомогою
API-функції WritePrivateProfileStringByKeyName. Зчитувати ж інформацію потрібно з
допомогою API-функції GetPrivateProfileString. Тепер розповім - як все це
працює? p>
1.Создайте
стандартний проект. p>
2.Введіте
модуль. p>
3.Удаліте
форму і клацніть два рази по модулю. p>
4.У
розділ General Declarations наступне оголошення двох, вищеназваних функцій: p>
Declare Function
GetPrivateProfileString & Lib _ p>
"kernel32" Alias
"GetPrivateProfileStringA" (ByVal _ p>
lpszSection $, ByVal lpszKey $, ByVal
lpszDefault $, _ p>
ByVal lpszReturnBuffer $, ByVal
cchReturnBuffer &, _ p>
ByVal lpszFile $) p>
lpszSection-ім'я секції p>
lpszKey - ім'я ключа p>
lpszDefault
- Значення, що повертається за замовчуванням, при рядку "" p>
lpszReturnBuffer
- Місце для рядка p>
cchReturnBuffer
- Розмір (довжина) місця для рядка p>
lpszFile - назва файлу p>
Declare Function
WritePrivateProfileStringByKeyName% Lib _ p>
"kernel32" Alias
"WritePrivateProfileStringA" (ByVal _ p>
lpApplicationName As String, ByVal
lpKeyName As String, _ p>
ByVal lpString As String, ByVal
lplFileName As String) p>
lpApplicationName - ім'я секції p>
lpKeyName - ім'я ключа p>
lpString - рядок p>
lplFileName - назва файлу p>
5.Создайте підпрограму Main - просто введіть Sub
Main. p>
6.У
підпрограму Main введіть: p>
Sub
Main () p>
створюємо
файл test.ini, в ньому заголовок "Main", ключ "URL" _ p>
і
рядок "http://members.tripod.de/cmvb" p>
Call
WritePrivateProfileStringByKeyName ( "Main", "URL", _ p>
"http://members.tripod.de/cmvb",
"c: test.ini") p>
створюємо файл test.ini, в ньому заголовок "Main", ключ "eMail" _ p>
і
рядок "[email protected]" p>
Call WritePrivateProfileStringByKeyName ( "Main",
"eMail", _ p>
"[email protected]",
"c: test.ini") p>
End
Sub p>
При
запуск проекту на диску С: відразу буде створений файл Test.ini з наступним
вмістом: p>
[Main] p>
URL = http://members.tripod.de/cmvb p>
eMail = [email protected] p>
8:-O!!! Чи не так, просто?
А вважати це трохи складніше. Отже, файл створений, тепер поробуем вважати
інформацію звідти. Видаліть все, що знаходиться між рядками "Sub
Main () "і" End Sub ". Впишіть наступне: p>
Sub
Main () p>
створюємо
змінну, в яку буде передавати рядок p>
Dim MyString As String p>
"набиваємо" її пробілами p>
MyString
= Space (100) p>
відкривається
файл файл test.ini, і в змінну MyString _ p>
записується
рядок із заголовка "Main", ключа "URL" p>
Call
GetPrivateProfileString ( "Main", "URL", "",
MyString, _ p>
Len (MyString),
"C: test.ini") p>
виводиться
на екран вміст змінної MyString p>
MsgBox
MyString p>
відкривається
файл файл test.ini, і в змінну MyString _ p>
записується
рядок із заголовка "Main", ключа "eMail" p>
Call
GetPrivateProfileString ( "Main", "eMail", "",
MyString, _ p>
Len (MyString),
"C: test.ini") p>
виводиться
на екран вміст змінної MyString p>
MsgBox MyString p>
End Sub p>
Список b> b> літератури b> p>
Для
підготовки даної роботи були використані матеріали з сайту http://visualprogs.narod.ru/
p>