Войти

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


Starter1
01-06-2011, 14:50
Прежде всего хочу сказать, что перелазил все темы, но так и не нашёл подходящую, поэтому решил создать новую :) .

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

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

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

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

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

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

Starter1
01-06-2011, 16:20
@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
У меня похожая ситуация, но не такая. Нужно заменить одну строчку на три. Как это сделать?

заменить
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
У меня похожая ситуация, но не такая. »
насколько не такая? может проще notapad++ использовать

xGETSx
05-09-2011, 18:55
может и проще, но нужно так. Я ж не себе пишу, а в программу вставляю.

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

Iska
05-09-2011, 22:24
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
Не работает. Может потому что у меня файл не .cfg?

Iska
05-09-2011, 23:01
Всё может быть. Кодировка, формат строк и т.д.

Если файл не слишком большого объёма — обязательно упакуйте в rar/7z, выложите на обменник, ссылку сюда или непосредственно в личку (http://forum.oszone.net/private.php?do=newpm&userid=121960). Посмотрим.

Iska
05-09-2011, 23:56
Файл получил.

У меня на Вашем файле — работает. В том плане, что ищет, находит и меняет. Результат в итоге получается, но, очевидно не такой, как нужен, ибо Ваш текстовый файл, как Вы верно указали, формата UNIX, следовательно концы строк у него LF, и, соответственно, в приведённом выше коде (http://forum.oszone.net/post-1746903.html#post1746903) достаточно заменить:
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
Спасибо, выручили. Кстати в обратную сторону тоже работает.

tax-zt
31-03-2015, 10:00
Здравствуйте, форумчане!
Очень нужна Ваша помощь. Требуется в текстовом файле средствами 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
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
Всем привет, кто в крутом форуме =)!

у меня немного подругому но тоже нужно в текстовом файлике поменять строку. А строка будет браться из имени файла к примеру есть файл 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
Starter1, у меня в поиске есть = online-mode=true
и замена идёт не коректо
получаеться так
true=online-mode=tr=true
то есть true= и =true лишние
как это поправить?

lmiol
15-11-2018, 17:22
Ребята, пишу архитектуру джейсона
но с самим кодом не знаком
изначально была написана гигантская часть архитектуры и теперь нужна автозамена
Вот такого

{
"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
Здравствуйте, форумчане.
Помогите плиз.
Очень нужна Ваша помощь. Требуется в текстовом файле средствами 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
1. Некропостерство не есть хорошо, это есть нехорошо, и лучше вообще не есть.
2. goto лучше избегать, а в данном конкретном случае безусловный переход нужен как собаке пятый хвост.
исходя из первых двух пунктов разбираться с батником нет никакого желания, так что самый примитивный костыль:
pushd "C:\Program Files (x86)\NSS\"
батник
popd




© OSzone.net 2001-2012