Alexander A Manaeff -

 
 

Как дописать в произвольное место текстового файла

Здесь обсуждаются вопросы по программированию на Visual Basic.

Модератор: UncleFather

Как дописать в произвольное место текстового файла

Сообщение UncleFather » 23 авг 2009 15:35, Вс

Проблема:
Имеется текстовый файл. Необходимо програмно дописать какую-либо информацию не в конец файла, как при использовании "Append", а в произвольное место файла.
Решение:
Текстовые файлы содержат строки переменной длины, снабженные маркерами конца строки. Для работы с текстовыми файлами следует использовать стандартные режимы Input, Append и Output.
Поскольку текстовые файлы, в отличие от файлов прямого доступа, нельзя открыть одновременно на чтение и на запись, для изменения текстового файла необходимо воспользоваться вспомогательным файлом. Во вспомогательный файл записываются необходимые результирующие данные, после чего исходный файл удаляется с диска, а имя вспомогательного файла заменяется на имя исходного. Далее, поскольку строки, содержащиеся в текстовом файле, могут иметь различную длину, для определения числа строк необходимо последовательно считать из файла все его строки. В отличие от строковых файлов прямого доступа, в VB5-6 для чтения данных из текстовых файлов вполне допустимо использовать переменные типа String, не фиксируя их размер.
Пример:
Код: Выделить всё
       
Dim F1, F2 As Integer
Dim FileName1, FileName2, ReadFromFile, SearchWord, NewVocWord As String
    NewVocWord = Inputbox ("Введите слово для добавления", "Добавление слова в файл")   
    SearchWord= Inputbox ("Введите слово для поиска", "Добавление слова в файл")
    F1 = FreeFile()
    Open FileName1 For Input Access Read Lock Write As #F1
    F2 = FreeFile()
    Open FileName2 For Output Access Write Lock Read Write As #F2
    Do Until EOF(F1)
        Line Input #F1, ReadFromFile
        Print #F2, ReadFromFile
        If UCase(Trim(ReadFromFile)) = SearchWord Then
            Print #F2, NewVocWord
        End If
    Loop
    Close #F1
    Close #F2
    Kill FileName1
    Name FileName2 As FileName1
Последний раз редактировалось UncleFather 23 авг 2009 16:12, Вс, всего редактировалось 1 раз.
Аватара пользователя
UncleFather
Site Admin
 
Сообщения: 1257
Зарегистрирован: 17 авг 2004 17:20, Вт

Сообщение Bibigool » 23 авг 2009 16:02, Вс

Где FileName1 - имя файла, в который необходимо добавить текст;
FileName2 - имя временного файла;
ReadFromFile - переменная для хранения текущей строки;
SearchWord - слово для поиска в файле, после которого будет вставлено новое слово;
NewVocWord - новое слово, которое необходимо вставить в файл.
Алгоритм такой:
1. Открываем оба файла (причем, если второй файл отсутствует - он создастся сам).
2. Считываем строку из первого файла.
3. Записываем ее во второй файл.
4. Если считанная строка совпадает со словом для поиска, вставляем во второй файл слово для вставки после слова для поиска (слово будет вставлено новой строкой).
Если есть необходимость вставлять слово текущей строкой - код не сложно изменить:
Код: Выделить всё
Line Input #F1, ReadFromFile
If UCase(Trim(ReadFromFile)) = SearchWord Then
    Print #F2, ReadFromFile & NewVocWord
Else
    Print #F2, ReadFromFile
End If

Так же можно вставить счетчик для того, чтобы искались не все вхождения слова для поиска, а только заданное.
Аватара пользователя
Bibigool
 
Сообщения: 41
Зарегистрирован: 18 авг 2004 00:13, Ср


Вернуться в Visual Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Alexander A Manaeff -
@Mail.ru .