Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Как изменить конкретную строку в текстовом файле с помощью Vbscript

Ответить
Настройки темы
VBS/WSH/JS - [решено] Как изменить конкретную строку в текстовом файле с помощью Vbscript

Пользователь


Сообщения: 66
Благодарности: 7

Профиль | Отправить PM | Цитировать


Добрый день! Помогите написать скрипт замены определенной строки текстовом файле с помощью Vbscript

Отправлено: 12:02, 29-10-2011

 

Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:30, 29-10-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 66
Благодарности: 7

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: txt text.txt
(2.1 Kb, 33 просмотров)

megaloman, - Это номер строки в текстовом файле, в файле .txt 266 строк, нужно заменить строку 3 на новую

Последний раз редактировалось neo21, 29-10-2011 в 15:40.


Отправлено: 15:21, 29-10-2011 | #3


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
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

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:39, 29-10-2011 | #4


Пользователь


Сообщения: 66
Благодарности: 7

Профиль | Отправить PM | Цитировать


megaloman, Спасибо большое, очень помогли мне.

Отправлено: 17:53, 29-10-2011 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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

Отправлено: 18:46, 29-10-2011 | #6


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


С учетом замечания 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, 30-10-2011 в 15:49.

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:44, 30-10-2011 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


megaloman,
Код: Выделить весь код
nStrok = UBound(Mas)                            ' Макс значение индекса массива (Число строк -1 в исходном тексте- нумерация элементов массива с 0)
потерялся в новом коде. Потому я стараюсь всегда пользовать «Option Explicit».

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

Отправлено: 14:15, 30-10-2011 | #8


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Спасибо Каюсь! Каюсь Каюсь! Спешка. Исправил...

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 15:47, 30-10-2011 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Как изменить конкретную строку в текстовом файле с помощью Vbscript

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление строк в текстовом файле, как это сделать??? VladZombie Скриптовые языки администрирования Windows 70 08-09-2020 13:28
VBS/WSH/JS - [решено] Как создать файл в кодировке UTF-8 с помощью VBScript? Zeron Скриптовые языки администрирования Windows 2 30-05-2011 03:50
Загрузка - Как изменить надпись на текстовом этапе Microteam Microsoft Windows 2000/XP 2 27-03-2011 12:20
[решено] Найти и заменить в текстовом файле. Как? Pozia AutoIt 15 11-03-2010 19:12
[решено] Как удалить строки в текстовом файле при отсутсвии файла в опрелеленном месте? Pozia AutoIt 23 14-05-2009 21:41




 
Переход