Создание и заполнение TXT файла

Автор moland, 19 октября 2014, 20:47

moland

Private Sub UserForm_Initialize()

Const strFN As String = "C:\1.txt" 
   
    Open strFN For Output As #1 
    Print #1, 
    Print #1, 
    Print #1, "1" 
    Print #1, "90" 
     
    Close #1 
End sub
Приведенный выше код  создает файл и заносит в первые четыре строки значения. В первые две ничего не вводится (но если там что нибудь записано оно удаляется). Как сделать так чтобы значения "1" и "90" вносились сразу в третью и четвертую строки, а первая и вторая игнорировались. Т.е мне нужно внести значения в конкретные строки файла TXT, а остальные не трогать.

Администратор

moland, могу предложить такой вариант. Создаёте новый пустой текстовый файл. Двигаетесь по старому текстовому файлу. Нужные строки переносите из старого файла в новый файл. В тех местах, где ненужные строки, вставляете свои данные.
Подходит Вам такой вариант? Если подходит, то знаете, как это сделать?

moland

1. Такой вариант подходит. Можете написать, как это сделать?
2. Но мне интересно, может ли VBA с текстовым файлом выполнить следующие действия: открыть его, прочитать первую строку, прочитать вторую строку, записать значение в третью строку, записать значение в четвёртую строку, закрыть его.
При этом не создавая дополнительных файлов.

Администратор

Пункт 1

Код:

Sub Макрос1()

    Const strFN_Source As String = "C:\Users\User\Desktop\Источник.txt"
    Const strFN_Res As String = "C:\Users\User\Desktop\Результат.txt"
   
    Dim strLine As String
    Dim i As Long
   
   
    ' Открытие файла-источника.
    Open strFN_Source For Input As #1
    ' Создание файла-результата.
    Open strFN_Res For Output As #2
       
    ' В цикле двигаемся по строкам текстового файла.
    Do While VBA.EOF(1) = False
       
        ' С помощью переменной i определяем, на какой строке мы находимся.
        i = i + 1
       
        ' Смотрим, на какой строке мы находимся, чтобы сделать нужное действие.
        ' Если мы находимся на второй строке, то мы вставим свои данные,
            ' а не будем копировать данные из текстового файла.
        If i = 2 Then
           
            ' Запись в файл-результат нужных данных.
            Print #2, "нужные данные"
            ' Делаем бессмысленное действие, чтобы курсор перешёл в следующую строку,
                ' и чтобы строка не была взята из файла-источника.
            Line Input #1, strLine

        Else
           
            ' Копирование строки из файла-источника в переменную strLine.
            Line Input #1, strLine
            ' Запись данных из переменной strLine в файл-результат.
            Print #2, strLine
           
        End If
       
    Loop
       
    Close #1
    Close #2

End Sub
[свернуть]


Пункт 2

Можно ли записать данные в нужную строку без использования дополнительного текстового файла - я не знаю. В последовательном доступе - это точно нельзя сделать. Можно попробовать произвольный или бинарный доступ. Но я такое ни разу не делал.