PDA

Показать полную графическую версию : [решено] Как изменить конкретную строку в текстовом файле с помощью Vbscript


neo21
29-10-2011, 12:02
Добрый день! Помогите написать скрипт замены определенной строки текстовом файле с помощью Vbscript

megaloman
29-10-2011, 12:30
neo21, что такое конкретная строка? Подробнее объясните задачу. Или это номер строки в текстовом файле? Или это подстрока, которую надо заменить во всём тексте? Что делать, если таких подстрок много? Чем подробнее объясните, тем скорее и качественнее получите ответ. ИМХО, копаться в чужом скрипте, чтобы его поменять, мало кому интересно, особенно если не ясно, что нужно получить.

neo21
29-10-2011, 15:21
megaloman, - Это номер строки в текстовом файле, в файле .txt 266 строк, нужно заменить строку 3 на новую

megaloman
29-10-2011, 17:39
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

neo21
29-10-2011, 17:53
megaloman, Спасибо большое, очень помогли мне.

Iska
29-10-2011, 18:46
megaloman, вместо:
AllTxt = Replace(AllTxt, vbLf, "") ' Удаляем все символы перевода строки в переменной
Mas = Split(AllTxt, vbCr) ' Разбиваем полученную строку в массив. Резделитель - конец строки vbCr
можно просто:
Mas = Split(AllTxt, vbCrLf)
— это работает. Ну, и обратно — тоже:
AllTxt = Join(Mas, vbCrLf)

megaloman
30-10-2011, 08:44
С учетом замечания 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

Iska
30-10-2011, 14:15
megaloman,
nStrok = UBound(Mas) ' Макс значение индекса массива (Число строк -1 в исходном тексте- нумерация элементов массива с 0)

потерялся в новом коде. Потому я стараюсь всегда пользовать «Option Explicit».

Наверное, Вы хотели совсем «nStrok» исключить, наподобие:
If UBound(Mas) + 1 >= iStrok Then
и присвоение — убрали, а строку с условием поправить подзабыли?!

megaloman
30-10-2011, 15:47
Спасибо Каюсь! Каюсь Каюсь! Спешка. Исправил...




© OSzone.net 2001-2012