Показать полную графическую версию : [решено] Замена текста в 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%
У меня похожая ситуация, но не такая. Нужно заменить одну строчку на три. Как это сделать?
заменить
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"));
Можно это как-нибудь реализовать?
У меня похожая ситуация, но не такая. »
насколько не такая? может проще notapad++ использовать
может и проще, но нужно так. Я ж не себе пишу, а в программу вставляю.
Не обязательно это делать средствами bat, можно и программу из-под него запустить.
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"
Не работает. Может потому что у меня файл не .cfg?
Всё может быть. Кодировка, формат строк и т.д.
Если файл не слишком большого объёма — обязательно упакуйте в rar/7z, выложите на обменник, ссылку сюда или непосредственно в личку (http://forum.oszone.net/private.php?do=newpm&userid=121960). Посмотрим.
Файл получил.
У меня на Вашем файле — работает. В том плане, что ищет, находит и меняет. Результат в итоге получается, но, очевидно не такой, как нужен, ибо Ваш текстовый файл, как Вы верно указали, формата 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""));"
для получения ожидаемого результата.
Спасибо, выручили. Кстати в обратную сторону тоже работает.
Здравствуйте, форумчане!
Очень нужна Ваша помощь. Требуется в текстовом файле средствами 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.
)
Всем привет, кто в крутом форуме =)!
у меня немного подругому но тоже нужно в текстовом файлике поменять строку. А строка будет браться из имени файла к примеру есть файл 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 лишние
как это поправить?
Ребята, пишу архитектуру джейсона
но с самим кодом не знаком
изначально была написана гигантская часть архитектуры и теперь нужна автозамена
Вот такого
{
"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 ???
1. Некропостерство не есть хорошо, это есть нехорошо, и лучше вообще не есть.
2. goto лучше избегать, а в данном конкретном случае безусловный переход нужен как собаке пятый хвост.
исходя из первых двух пунктов разбираться с батником нет никакого желания, так что самый примитивный костыль:
pushd "C:\Program Files (x86)\NSS\"
батник
popd
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.