Войти

Показать полную графическую версию : [решено] Множественная замена текста в файлах текстом из другого файла


Delleter
04-10-2015, 16:54
Доброго времени суток!
Есть каталог, в котором находится большое количество текстовых файлов с именами 1.txt, 2.txt и так далее до, например, 56.txt. Также в этом каталоге лежит файл с именем replace.txt.
Сожержимое файлов 1.txt, 2.txt и так далее одинаковое:
"Ap_s"= 1.781'**пропускная
"Kd2"= ( 4.906 - 0.5 ) * 2'**коэф диф в осевом d_напорн / b
"delta"= 4.188'**рад зазор
"D1@Эскиз29"= "rk" * 2 + "delta"
"D29@Эскиз1"= "rk" * 2 + "delta"
Сожержимое файла replace.txt:
1.721 4.916 4.188
1.781 4.906 4.388
1.741 4.936 3.988
...

т.е. в нем 56 строк, в каждой по 3 числа, разделенных пробелами.
Необходимо сделать батник, запустив который, произойдет следующее:
В файле 1.txt числа 1.781, 4.906, 4.188 заменятся на соответствующие числа из файла replace.txt, находящиеся в первой строке. Затем тоже самое проихойдет в файле 2.txt, только числа берутся уже со второй строки и так далее.

Нашел батник, который может менять определенные строки в одном файле строками из другого файла:
@Echo Off
SetLocal EnableDelayedExpansion
:: Обрабатываемый файл
Set file=e:\Temp\list 1.txt
:: Файл с заменами (содержит только две строки по условию задачи)
Set filechang=e:\Temp\list 2.txt
:: Два образца строк, подлежащих замене
Set srt1=First text
Set srt2=Second text

Set cnt =0
For /F "usebackq tokens=* delims=" %%i In ("%filechang%") Do (
Set /A cnt +=1
Set chang!cnt!=%%i
)
For /F "usebackq tokens=* delims=" %%i In ("%file%") Do (
If "%%i"=="%srt1%" (
Echo %chang1%>>test.txt
) Else (
If "%%i"=="%srt2%" (
Echo %chang2%>>test.txt
) Else (
Echo %%i>>test.txt
)
)
)
Copy test.txt "%file%" /Y>Nul
Del test.txt>Nul
но он не подходит тем, что заменяет именно строки строками.
Файл replace.txt впринципе можно переформатировать, заменив все пробелы переходами на следующую строку, таким образом для замены чисел из файла 1.txt потребуются первые 3 строки файла replace.txt и так далее.
Непонятно, как сделать так, что б искался именно текст, а не строка. Также непонятно, как это всё запихнуть в цикл, что б перебирать файлы.
Буду очень признателен за помощь.

Georgio
04-10-2015, 18:27
Сожержимое файлов 1.txt, 2.txt и так далее одинаковое... »



@<"replace.txt" (
for /f "tokens=1-3" %%i in ('more') do @(
set/a n+=1
for /f %%? in ('set/a n') do @>"%%?.txt" (
echo "Ap_s"= %%i'**пропускная
echo "Kd2"= ( %%j - 0.5 ^) * 2'**коэф диф в осевом d_напорн / b
echo "delta"= %%k'**рад зазор
echo "D1@Эскиз29"= "rk" * 2 + "delta"
echo "D29@Эскиз1"= "rk" * 2 + "delta"
)
)
)
.

Delleter
04-10-2015, 20:24
Georgio, вот это да, я даж не подумал, что искать нужные числа не надо, можно просто заменять исходные файлы новыми с нужными числами... спасибо огромное!

n_stein@vk
16-06-2017, 02:22
ДД)

У меня примерно такая же задача.
Имеется 1000 папок с разными именами:
abakan
abaza
abdulino
abinsk
achinsk
adygejsk
и т.д.

В каждой папке есть файл index.html со словом Москва, которое встречается несколько раз в коде
Также есть файл Replace.txt с названиями городов:
Абакан
Абаза
Абдулино
Абинск
Ачинск
и т.д.

Нужно в каждой папке в файле index.html заменить слово Москва на соответствующее папке название города на кириллице.

Iska
16-06-2017, 05:16
n_stein@vk, упакуйте пару-тройку файлов index.html (если они разные) или один файл index.html (если они все одинаковые) в архив и приложите последний к сообщению. Это раз.

Второе. Составьте перечень однозначного соответствия между списком:
abakan
abaza
abdulino
abinsk
achinsk
adygejsk »
и списком:
Абакан
Абаза
Абдулино
Абинск
Ачинск »




© OSzone.net 2001-2012