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