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

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

Starter1 01-06-2011 14:50 1686416

Замена текста в txt
 
Прежде всего хочу сказать, что перелазил все темы, но так и не нашёл подходящую, поэтому решил создать новую :) .

В общем такая проблема. У нас есть файл 1.txt и в нём такое содержание:

Код:

Цифровой клавиатурой называется совокупность близко расположенных клавиш с цифрами,
предназначенных для ввода чисел (например, номеров). Существует два различных варианта
расположения цифр на таких клавиатурах. В телефонах используется клавиатура, в которой числовые
значения клавиш возрастают слева направо и сверху вниз. Аналогичный тип клавиатуры используется
в домофонах и других средствах аудиосвязи (например, в программе Skype), а также на пультах
дистанционного управления (например, на пульте управления телевизором). ###

Необходимо последние три символа "###" заменить на "Автор Петрович."

Внимание! Есть пару условий! Проблема должна решаться только при помощи bat или cmd и никаких дополнительных программ, текст может быть любой, любого размера, любого кол-во строк букв символов и тд, но в конце всегда будут "###".

Заранее спасибо :) !

Starter1 01-06-2011 15:08 1686429

Кстати если не получается, то можно эти три символа перенести и в первую строку на первое место то есть перед самим текстом. Без разницы, главное чтобы работало. :)

Starter1 01-06-2011 16:20 1686499

@echo off
setlocal enabledelayedexpansion
Set infile=1.txt
Set find=###
Set replace=Автор Петрович.
@echo off
setlocal enabledelayedexpansion
set COUNT=0
for /F "tokens=* delims=," %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%find%=%replace%!
Echo !TMPR!>>TMP.TXT
)
move TMP.TXT %infile%le%

xGETSx 05-09-2011 17:21 1746701

У меня похожая ситуация, но не такая. Нужно заменить одну строчку на три. Как это сделать?

заменить
Код:

package_extract_dir("boot", "/boot");
на
Код:

assert(package_extract_file("boot.img", "/tmp/boot.img"),
      write_raw_image("/tmp/boot.img", "boot"),
      delete("/tmp/boot.img"));

Можно это как-нибудь реализовать?

ferget 05-09-2011 18:44 1746745

Цитата:

Цитата xGETSx
У меня похожая ситуация, но не такая. »

насколько не такая? может проще notapad++ использовать

xGETSx 05-09-2011 18:55 1746747

может и проще, но нужно так. Я ж не себе пишу, а в программу вставляю.

Не обязательно это делать средствами bat, можно и программу из-под него запустить.

Iska 05-09-2011 22:24 1746903

xGETSx, например так (не проверялось):
читать дальше »
Код:

Option Explicit

' IOMode Enum
Const ForReading  = 1
Const ForWriting  = 2
Const ForAppending = 8


Dim strFileName
Dim strContent

Dim strFind
Dim strReplace


strFileName = WScript.Arguments.Item(0)

strFind    = "package_extract_dir(""boot"", ""/boot"");"
strReplace = "assert(package_extract_file(""boot.img"", ""/tmp/boot.img"")," & vbCrLf & _
        "write_raw_image(""/tmp/boot.img"", ""boot"")," & vbCrLf & _
        "delete(""/tmp/boot.img""));"

With WScript.CreateObject("Scripting.FileSystemObject")
        If .FileExists(strFileName) Then
                With .OpenTextFile(strFileName, ForReading)
                        strContent = .ReadAll()
                       
                        .Close
                End With
               
                With .OpenTextFile(strFileName, ForWriting)
                        .Write Replace(strContent, strFind, strReplace)
                       
                        .Close
                End With
        Else
                WScript.Echo "File [" & strFileName & "] not found"
        End If
End With

WScript.Quit 0


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

Script.vbs "c:\Sample folder\Sample file.cfg"

xGETSx 05-09-2011 22:55 1746926

Не работает. Может потому что у меня файл не .cfg?

Iska 05-09-2011 23:01 1746929

Всё может быть. Кодировка, формат строк и т.д.

Если файл не слишком большого объёма — обязательно упакуйте в rar/7z, выложите на обменник, ссылку сюда или непосредственно в личку. Посмотрим.

Iska 05-09-2011 23:56 1746957

Файл получил.

У меня на Вашем файле — работает. В том плане, что ищет, находит и меняет. Результат в итоге получается, но, очевидно не такой, как нужен, ибо Ваш текстовый файл, как Вы верно указали, формата UNIX, следовательно концы строк у него LF, и, соответственно, в приведённом выше коде достаточно заменить:
Код:

strReplace = "assert(package_extract_file(""boot.img"", ""/tmp/boot.img"")," & vbCrLf & _
        "write_raw_image(""/tmp/boot.img"", ""boot"")," & vbCrLf & _
        "delete(""/tmp/boot.img""));"

на:
Код:

strReplace = "assert(package_extract_file(""boot.img"", ""/tmp/boot.img"")," & vbLf & _
        "write_raw_image(""/tmp/boot.img"", ""boot"")," & vbLf & _
        "delete(""/tmp/boot.img""));"

для получения ожидаемого результата.

xGETSx 06-09-2011 01:05 1746988

Спасибо, выручили. Кстати в обратную сторону тоже работает.

tax-zt 31-03-2015 10:00 2489911

Здравствуйте, форумчане!
Очень нужна Ваша помощь. Требуется в текстовом файле средствами bat\cmd-файла поменять текст, в частности необходимо 13 поменять на 32.
Часть текстового файла приведена ниже.

<C_V>2</C_V>
<C_TYPE>0</C_TYPE>
<C_CNT>13</C_CNT>
<C_RES>8</C_RES>

Читал форумы, пытался что-то написать, но в результате ничего хорошего не получилось. Помогите написать программулинку, очень надо :sorry:

Foreigner 31-03-2015 10:21 2489916

tax-zt,
Код:

@echo off
setlocal

for /f "tokens=*" %%i in (1.txt) do call:1 "%%i"
move 1.tmp 1.txt
goto:eof

:1

set "str=%~1"
1>>1.tmp (

    0>nul set /p="%str:13=32%"
    echo.
   
)


AZABAZA 31-03-2015 10:25 2489919

Всем привет, кто в крутом форуме =)!

у меня немного подругому но тоже нужно в текстовом файлике поменять строку. А строка будет браться из имени файла к примеру есть файл CONTROL_ML_C-3142061215-20150319-00.BKP

Этот файл выглядит каждый раз по разному. Нужно брать самую последнюю дату! CONTROL_ML_C-3142061215-20150319-00.BKP

и там же нужно менять вторую строку на следующую ML_0000053280_0001_0845237174.ARC Но тут надо брать не все а только 0000053280
Нужно брать самый последний файл!

Если что не понятно, отпишитесь.
получилось немного хаотичьно. Прошу понять и простить =))

DonQuixote 30-12-2015 01:02 2589685

Starter1, у меня в поиске есть = online-mode=true
и замена идёт не коректо
получаеться так
true=online-mode=tr=true
то есть true= и =true лишние
как это поправить?

lmiol 15-11-2018 17:22 2840922

Ребята, пишу архитектуру джейсона
но с самим кодом не знаком
изначально была написана гигантская часть архитектуры и теперь нужна автозамена
Вот такого
Код:

{
"heroes": [
    {
      "id": "reim",
      "hero_skin_names": "skin_default, skin_serpent_mask_catherine"
    },
    {
      "id": "samuel",
      "hero_skin_names": "skin_default"
    }
  ]
}

В такое:
Код:

{
  "heroes": [
    {
      "id": "reim",
      "hero_skin_names": [
        {
          "id": "skin_default",
          "images": [
            {
              "fileURL": "",
              "image_settings_hero_detailed": {
                "scale": 1,
                "h_offset": 10,
                "v_offset": 10,
                "alignment": "center"
              },
              "image_settings_part_detailed": {
                "scale": 1,
                "h_offset": 10,
                "v_offset": 10,
                "alignment": "center"
              }
            }
          ]
        },
        {
          "id": "skin_serpent_mask_catherine",
          "images": [
            {
              "fileURL": "",
              "image_settings_hero_detailed": {
                "scale": 1,
                "h_offset": 10,
                "v_offset": 10,
                "alignment": "center"
              },
              "image_settings_part_detailed": {
                "scale": 1,
                "h_offset": 10,
                "v_offset": 10,
                "alignment": "center"
              }
            }
          ]
        }
      ]
    },
    {
      "id": "samuel",
      "hero_skin_names": [
        {
          "id": "skin_default",
          "images": [
            {
              "fileURL": "",
              "image_settings_hero_detailed": {
                "scale": 1,
                "h_offset": 10,
                "v_offset": 10,
                "alignment": "center"
              },
              "image_settings_part_detailed": {
                "scale": 1,
                "h_offset": 10,
                "v_offset": 10,
                "alignment": "center"
              }
            }
          ]
        }
      ]
    }
  ]
}

Как вы видно по второму варианту, hero_skin_names теперь не строкой передается а уже с массивом списка тех самых скинов, которые указывались через запятую
а для каждого скина добавляется просто одинаковая для всех приписка
Код:

  "images": [
    {
      "fileURL": "",
      "image_settings_hero_detailed": {
        "scale": 1,
        "h_offset": 10,
        "v_offset": 10,
        "alignment": "center"
      },
      "image_settings_part_detailed": {
        "scale": 1,
        "h_offset": 10,
        "v_offset": 10,
        "alignment": "center"
      }
    }
  ]

возможные варианты героев может быть от 1 до 20
скинов может быть от 0 до 20

sotmotor 04-08-2022 11:48 2989711

Здравствуйте, форумчане.
Помогите плиз.
Очень нужна Ваша помощь. Требуется в текстовом файле средствами bat-файла поменять текст, в частности необходимо "ON" поменять на "OFF".

файл называется 1.xml
Файл лежит по пути C:\Program Files (x86)\NSS\1.xml
В нем есть текст "ON"
Что прописать в батнике, что бы после запуска батника "ON" поменялось на "OFF" ?
Если батник лежит в той же папке что и файл 1.xml, то все работает.

@echo off
setlocal

for /f "tokens=*" %%i in (1.xml) do call:1 "%%i"
move 1.tmp 1.xml
goto:eof

:1

set "str=%~1"
1>>1.tmp (

0>nul set /p="%str:ON=OFF%"
echo.

)

Что дописать в батнике, что бы его можно было запускать в любом месте на ПК, а он в свою очередь изменял файл 1.xml лежащим по пути C:\Program Files (x86)\NSS\1.xml ???

Elven 04-08-2022 18:26 2989741

1. Некропостерство не есть хорошо, это есть нехорошо, и лучше вообще не есть.
2. goto лучше избегать, а в данном конкретном случае безусловный переход нужен как собаке пятый хвост.
исходя из первых двух пунктов разбираться с батником нет никакого желания, так что самый примитивный костыль:
Код:

pushd "C:\Program Files (x86)\NSS\"
батник
popd



Время: 23:04.

Время: 23:04.
© OSzone.net 2001-