Как изменить конкретную строку в текстовом файле с помощью Vbscript
Добрый день! Помогите написать скрипт замены определенной строки текстовом файле с помощью Vbscript
|
neo21, что такое конкретная строка? Подробнее объясните задачу. Или это номер строки в текстовом файле? Или это подстрока, которую надо заменить во всём тексте? Что делать, если таких подстрок много? Чем подробнее объясните, тем скорее и качественнее получите ответ. ИМХО, копаться в чужом скрипте, чтобы его поменять, мало кому интересно, особенно если не ясно, что нужно получить.
|
Вложений: 1
megaloman, - Это номер строки в текстовом файле, в файле .txt 266 строк, нужно заменить строку 3 на новую
|
Код:
fName = "D:\Delete\111.txt" ' Где текстовый файл
iStrok = 3 ' В какой строке меняем текст
repTxt = "У попа была собака, он её любил" ' Какой текст поместим в указанную строку
Set FSO = CreateObject("Scripting.FileSystemObject")
Set F = FSO.OpenTextFile(fName, 1, False) ' Открываем исходный текст файл для чтения
AllTxt = F.ReadAll() ' Cчитываем весь файл в строковую переменную
F.Close ' Закрываем файл
AllTxt = Replace(AllTxt, vbLf, "") ' Удаляем все символы перевода строки в переменной
Mas = Split(AllTxt, vbCr) ' Разбиваем полученную строку в массив. Резделитель - конец строки vbCr
nStrok = UBound(Mas) ' Макс значение индекса массива (Число строк -1 в исходном тексте- нумерация элементов массива с 0)
AllTxt = ""
If nStrok + 1 >= iStrok Then
Mas(iStrok - 1) = repTxt ' Заменяем нужный элемент массива (строку текста) заданной
For i = 0 To nStrok
If i <> nStrok Then
AllTxt = AllTxt + Mas(i) + vbCrLf ' Формируем строку из элементов массива, вставляя символы конца и перевода строки
Else
AllTxt = AllTxt + Mas(i) ' В конце последней строки ничего не ставим
End If
Next
Set F = FSO.OpenTextFile(fName, 2, False) ' Открываем исходный файл для записи
F.Write AllTxt ' Записываем полученное на место исходного файла
F.Close ' Закрываем файл
End If
|
megaloman, Спасибо большое, очень помогли мне.
|
megaloman, вместо:
читать дальше »
Код:
AllTxt = Replace(AllTxt, vbLf, "") ' Удаляем все символы перевода строки в переменной
Mas = Split(AllTxt, vbCr) ' Разбиваем полученную строку в массив. Резделитель - конец строки vbCr
можно просто:
Код:
Mas = Split(AllTxt, vbCrLf)
— это работает. Ну, и обратно — тоже:
Код:
AllTxt = Join(Mas, vbCrLf)
|
С учетом замечания Iska, скрипт существенно сократился
Код:
fName = "D:\Delete\111.txt" ' Где текстовый файл
iStrok = 3 ' В какой строке меняем текст
repTxt = "У попа была собака, он её любил" ' Какой текст поместим в указанную строку
Set FSO = CreateObject("Scripting.FileSystemObject")
Set F = FSO.OpenTextFile(fName, 1, False) ' Открываем исходный текст файл для чтения
AllTxt = F.ReadAll() ' Cчитываем весь файл в строковую переменную
F.Close ' Закрываем файл
Mas = Split(AllTxt, vbCrLf) ' Разбиваем полученную строку в массив. Резделитель - конец строки и перевод строки vbCrLf
If UBound(Mas) + 1 >= iStrok Then
Mas(iStrok - 1) = repTxt ' Заменяем нужный элемент массива (строку текста) заданной
AllTxt = Join(Mas, vbCrLf) ' Консолидируем массив в строку для записи
Set F = FSO.OpenTextFile(fName, 2, False) ' Открываем исходный файл для записи
F.Write AllTxt ' Записываем полученное на место исходного файла
F.Close ' Закрываем файл
End If
|
megaloman,
Код:
nStrok = UBound(Mas) ' Макс значение индекса массива (Число строк -1 в исходном тексте- нумерация элементов массива с 0)
потерялся в новом коде. Потому я стараюсь всегда пользовать «Option Explicit».
Наверное, Вы хотели совсем «nStrok» исключить, наподобие:
Код:
If UBound(Mas) + 1 >= iStrok Then
и присвоение — убрали, а строку с условием поправить подзабыли?!
|
Спасибо Каюсь! Каюсь Каюсь! Спешка. Исправил...
|
Время: 22:30.
© OSzone.net 2001-