Vb - робота з файлами

Ще одна моя старенька статейка на тему роботи з текстовими файлами засобами Visual Basic 6.0.

У даній статті мова піде про роботу з текстовими файлами засобами Visual Basic.

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

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

У Visual Basic існує функція FreeFile. яка повертає номер вільного каналу, який можна використовувати для роботи з файлом. Якщо вільних каналів немає, то виникає помилка.

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 - для додавання, якщо файл не існує то він буде створений, а якщо файл існує, то дані будуть додаватися в кінець файлу.

Наприклад, якщо треба вважати перший рядок з якого-небудь файлу в змінну 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 для читання

Line Input #MyFile, tS 'Читаємо файл TEST.TXT через підрядник

If i => 5 Then S = tS 'Якщо п'ятий рядок, то запам'ятовуємо її в змінну S

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 # Номер_файла. при цьому, # Номер_файла вказувати не обов'язково.

Привіт Олексій,
У мене таке питання, можна відкриватися будь-яку html файл і іскаті конкретного тексту і якщо наїде замінити те що ми хочемо?
Заздалегідь дякую.

Найпростіший спосіб відкрити файл і зробити Replace.

Replace ( "дані html-файлу", "що шукати", "на що замінити")

Вибачте, по-моєму, я немогла обяснить. Я мав на увазі створити в VB таку програму яка відкриває html файлів по одному з папки файлів і замінює потрібний текст пропозиції.

I mean, to creat a soft on basis VB to open html files from folder and looking requested sentence, change their text, as we what. For example there are thousands html files in the folder.

Dim file As String
Dim path As String
path = "C: *. html" 'set path
file = Dir (path) 'first file
Do While Not file = ""
'Read file
Open path "" file For Input As # 1
Dim FileData As String
FileData = Input (LOF (1), 1)
Close
'replace
FileData = Replace (FileData, FindText, NewText)
'save
Open path "" file For Output As # 1
Print # 1, FileData
Close
'Next file
file = Dir ()
Loop

Спасибі, Олексій. Але у мене показує помилка:
Run-time error '52'
Bad file name or number

коли натискав debug
показує рядок
Open path "" file For Input As # 1
що мені робити?

хоча субфолдере З: / перебували кілька хтмл файли

Dim f
f = FreeFile
Open path "" file For Input As #f

щось типу цього, я вже сто років на VB 6.0 НЕ програмував :)

Чи можна відкрити файл для читання в певній кодування? тобто текстовий файл в кодування utf-8 при відкритті і читанні через підрядник, в рядках відображається якась біліберда, а якщо відкрити цей файл в блокноті то все нормально!

синтаксис:
StrConv (String, Conversion [, LocaleID])

опис:
Функція повертає рядок, перетворену зазначеним чином.

параметри:
String - перетворюються рядок.

Conversion - числове вираз, що вказує тип перетворення.

LocaleID - значення типу Long, що позначає локальний ідентифікатор.

'Повертає "Це Робота Функції Strconv"
Debug.Print StrConv ( "це робота функції strconv", _
vbProperCase)

vbFromUnicode - 128 - Символи Unicode перетворюються в символи прийнятої за замовчуванням кодової сторінки.