Private Sub Command1_Click()
Dim strSearch(5) As String, tmp(5) As String 'На данный момент в файле 5 строк, соответственно создаю массив из 5 переменных
MyFile = FreeFile
k = 0 ' Заранее неизвестно количество строк, считаю через такую конструкцию, счет ведется с нуля в переменную К
Open "C:\Logg\1.txt" For Input As #MyFile
Input #MyFile, tmp (5)
Do Until EOF(MyFile)
k = k + 1 ' Прибавляем по 1 строке после каждого прохода цикла до конца файла
Input #MyFile, tmp(5)
Loop
Close #MyFile
Open "C:\Logg\1.txt" For Input As MyFile
For i = 0 To k
strSearch(i) = i ' Вообще количество переменных в массиве должно равняться количеству строк, по факту так и есть
' Каждый проход цикла задает элементу массива соответствующей строки
Line Input #MyFile, tmp(5)
strSearch(I) = tmp(i) ' При проходе цикла должна соотвествующему номеру строки назначиться ее значение такому же номеру элементу массива
Next i
Close #MyFile
Open "C:\Logg\1.txt" For Output As #MyFile ' Открываем файл
' Пишем обратно строки в порядке от 0 до конца
' И если нужно изменить какую то строку - просто меняем значение переменной
Print #MyFile, strSearch(0)
Print #MyFile, strSearch(1)
Print #MyFile, strSearch(2)
Close #MyFile ' Закрываем файл
End Sub
Do While MyFile.AtEndOfStream <> True
TextLine = MyFile.ReadLine
myCol.Add TextLine
Loop
Только если:Можно ли вообще вести запись в нужную строки/строки по желанию напрямую?
Option Explicit
Private Sub Form_Load()
On Error GoTo ErrorHandler
Dim ff As Integer
Dim lSize As Long
Dim sContents As String
Dim sFile As String
Dim sSearch As String
Dim sReplace As String
Dim aTmp() As String
Dim i As Long
'исходный файл
sFile = App.Path & "\Test.txt"
sSearch = "искомая строка"
sReplace = "замена"
If Dir$(sFile) = "" Then MsgBox "Файл: " & sFile & " не существует!": Exit Sub
'читаем файл целиком
ff = FreeFile()
Open sFile For Binary Access Read As #ff
lSize = LOF(ff)
'проверяем что файл не пустой
If lSize > 0 Then
'выделяем буфер нужной длинны
sContents = String(lSize, 0)
Get #ff, , sContents
End If
Close #ff
'разбиваем строку по разделителю 0x0D 0x0A
'предварительно удаляем все знаки 0x0D
aTmp = Split(Replace(sContents, vbCr, ""), vbLf)
'ищем нужную строку и заменяем
For i = 0 To UBound(aTmp)
'поиск без учёта регистра
If StrComp(aTmp(i), sSearch, vbTextCompare) = 0 Then
aTmp(i) = sReplace
Exit For
End If
Next
'записываем файл обратно, объединив все элементы массива с добавлением знаков 0x0D 0x0A (перенос строки) между ними
sContents = Join(aTmp, vbCrLf)
'открываем файл для записи
ff = FreeFile()
Open sFile For Binary Access Write As #ff
Put #ff, , sContents
Close #ff
Exit Sub
ErrorHandler:
MsgBox "Произошла непредвиденная ошибка: # " & Err.Number & ": " & Err.Description & ". LastDllErr = " & Err.LastDllError
End Sub
,Кстати, если файл меньше 64 кБ, то его можно прочитать в текстовое поле или переменную целиком:Спасибо!
Разбираю все варианты уже из спортивного интереса.
И мой первоначальный вариант, кстати, работает если вместо
strSearch(I) = tmp(i)
Указывать явно:
If strSearch(i) = 0 then .....
Ну и далее по тексту.
А почему 64?если файл меньше 64 кБ
Если в файле больше 64 кБ, то при таком чтении:А почему 64?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?