Компьютерный форум 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=338438)

TRaMeLL 26-12-2018 14:18 2848382

Замена символа в строках имеющих определенное начало
 
Добрый день,
Есть файл в котором несколько раз встречаются строки начало которых: "НазначениеПлатежа=", нужно в идущих далее данных заменить знак "=" на какой-то другой, например на ":", но только в этой строке, естественно.

Т. е. изначальная строка:
НазначениеПлатежа=Оплата на сумму=10 рублей.

Должна получить вид:
НазначениеПлатежа=Оплата на сумму:10 рублей.

Busla 26-12-2018 15:33 2848394

Не стоит это делать батником.

Iska 26-12-2018 16:54 2848417

TRaMeLL, нужен образец файла (нужно знать кодировку, наличие BOM, вид концов строк). Упакуйте его в архив и приложите к сообщению.

Iska 26-12-2018 21:02 2848457

TRaMeLL, вообще, по-хорошему, нужно обработку импорта в 1С править, дабы она не спотыкалась на втором знаке равенства в строке.

Попробуйте так (на WSH):
Скрытый текст
Код:

Option Explicit

Dim strSourceFile

Dim objFSO
Dim strContent


If WScript.Arguments.Count = 1 Then
        Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
       
        strSourceFile = objFSO.GetAbsolutePathName(WScript.Arguments.Item(0))
       
        If objFSO.FileExists(strSourceFile) Then
                With objFSO.OpenTextFile(strSourceFile)
                        strContent = .ReadAll()
                        .Close
                End With
               
                With WScript.CreateObject("VBScript.RegExp")
                        .Pattern  = "(^НазначениеПлатежа=.+?)=(.+$)"
                        .Global    = True
                        .MultiLine = True
               
                        If .Test(strContent) Then
                                strContent = .Replace(strContent, "$1:$2")
                               
                                objFSO.CopyFile strSourceFile, strSourceFile & ".bak", True
                               
                                With objFSO.CreateTextFile(strSourceFile, True)
                                        .Write strContent
                                        .Close
                                End With
                        Else
                                WScript.Echo "Nothing found."
                        End If
                End With
        Else
                WScript.Echo "Can't find source file [" & strSourceFile & "]."
                WScript.Quit 2
        End If
       
        Set objFSO = Nothing
Else
        WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>"
        WScript.Quit 1
End If

WScript.Quit 0


Путь к исходному файлу указывается аргументом скрипта (также можно просто перетащить исходный файл на скрипт/ярлык на скрипт в Проводнике). Делать специальную проверку, что имя переданного файла имеет строго заданный вид «kl_to_1c.txt» — не стал (если нужно — сделаем).

TRaMeLL 26-12-2018 21:41 2848464

Iska, говорит "Nothing found."

Iska 26-12-2018 22:03 2848466

Хмм… Даже не знаю, что сказать:
Скрытый текст



На всякий случай — в какой кодировке сохранили скрипт?

TRaMeLL 26-12-2018 23:41 2848481

Цитата:

Цитата Iska
На всякий случай — в какой кодировке сохранили скрипт? »

Ага, оно самое, в UTF-8 оказалось. Всё работает, спасибо огромное, снова выручили.


Время: 06:40.

Время: 06:40.
© OSzone.net 2001-