Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Изменить текстовый файл (http://forum.oszone.net/showthread.php?t=217227)

PoltavaPGS 05-10-2011 15:35 1766552

Изменить текстовый файл
 
Вложений: 1
Доброго времени суток. Может кто поможет в решении такой вот задачки
Есть текстовый файл примерно на 2000 строк
в нем есть строка
Код:

  MENUITEM "&Поликарпов П.П.|Поликарпов"
Нужно чтобы при запуске скажем bat файла у пользователя запрашивало ввод его фамилии и затем Поликарпов П.П. заменялся на ту фамилию которую ввел пользователь.
подскажите как это лучше сделать. Пример файла который нужно изменить во вложении

Iska 05-10-2011 17:06 1766641

PoltavaPGS, если без проверок, то примерно так:
читать дальше »
Код:

Option Explicit

Const ForReading  = 1
Const ForWriting  = 2

Const TristateTrue      = -1


Dim strFIO

Dim strFileName
Dim strContent

Dim strFind
Dim strReplace


strFileName = WScript.Arguments.Item(0)

strFind    = "MENUITEM ""&Поликарпов П.П.|Поликарпов"""
strReplace = ""

With WScript.CreateObject("Scripting.FileSystemObject")
        If .FileExists(strFileName) Then
                strFIO = Trim(InputBox("Введите Ваши фамилию, имя, отчество в виде:" & vbCrLf & vbCrLf & _
                        "Иванов И.И.", "Введите фамилию, имя, отчество", ""))
               
                If Len(strFIO) <> 0 Then
                        strReplace = "MENUITEM ""&" & strFIO & "|" & Split(strFIO)(0) & """"
                       
                        With .OpenTextFile(strFileName, ForReading, False, TristateTrue)
                                strContent = .ReadAll()
                               
                                .Close
                        End With
                       
                        With .OpenTextFile(strFileName, ForWriting)
                                .Write Replace(strContent, strFind, strReplace)
                               
                                .Close
                        End With
                End If
        Else
                WScript.Echo "Файл [" & strFileName & "] не найден"
        End If
End With

WScript.Quit 0


Файл для обработки указываете аргументом скрипта:
Код:

Script.vbs "c:\Sample folder\GRAPHIC.PMN"
либо непосредственно в коде вместо присвоения аргумента:
Код:

strFileName = "c:\Sample folder\GRAPHIC.PMN"
P.S. Если Вам действительно надо будет регулярно менять, я бы вместо конкретной фамилии «&Поликарпов П.П.|Поликарпов» вставил шаблон-заполнитель, который бы потом искался и заменялся.

PoltavaPGS 05-10-2011 17:21 1766651

Спасибо то что нужно!!!

PoltavaPGS 18-10-2011 12:23 1776013

Так есть парочка проблем
1) Это то что файл после замены в нем строки таким образом получается в половину меньшего размера. Полагаю что то в кодировках зарыто ??? так вот после таких манипуляций программа для которой он непосредственно предназначен открывает его без проблем. И блокнот тоже без вопросов. А вот программа специально для удобного редактирования этого файла напрочь отказывается его открывать.
2)Как быть если нужно заменить несколько раз ввод еще одной строки ничего не дал что я не так делаю ???
Код:

.Write Replace(strContent, strFind, strReplace)
.Write Replace(strContent, strFind2, strReplace2)


Iska 18-10-2011 14:48 1776122

Цитата:

Цитата PoltavaPGS
1) Это то что файл после замены в нем строки таким образом получается в половину меньшего размера. »

Архив с файлом до, файлом после, и Ваш код скрипта.
Цитата:

Цитата PoltavaPGS
2)Как быть если нужно заменить несколько раз ввод еще одной строки ничего не дал что я не так делаю ??? »

Для начала — расставлять знаки препинания до появления в предложении смысла.

PoltavaPGS 26-10-2011 16:56 1782252

Всем спасибо! Во всем разобрался.


Время: 03:12.

Время: 03:12.
© OSzone.net 2001-