32 33 34 1 2 35 36 37 38 39 40 41 4 42 43 44 45 46 47 5 48 49 6 50 51 52 53 54 55 56 57 58 9 59 10 60 7 61 62 63 64 65 66 67 68 69 8 70 71 72 11 73 74 75 76 77 78 14 79 80 81 31 17 15 82 16 20 83 84 85 19 86 87 88 30 89 18 90 21 91 92 93 94 95 96 97 98 99 22 100 101 102 103 104 105 23 24 106 107 108 26 109 13 110 111 29 28 112 113 114 115
Увага Знижка 50% на курси! поспішайте подати
заявку
Професійної перепідготовки 30 курсів від 6900 руб.
Курси для всіх від 3000 руб. від 1500 руб.
Підвищення кваліфікації 36 курсів від 1500 руб.
Робота з текстовими файлами в 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