Робота з текстовими файлами в 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