|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Скрипт для замены текста в файлах |
|
Любой язык - [решено] Скрипт для замены текста в файлах
|
Новый участник Сообщения: 22 |
Ищу решение - как лучше реализовать замену определенного текста в текстовом файле?
Файлы примерно по 5мб, разных пар текста для замены будет порядка 100 штук. То есть в каждом файле организовывается поиск примерно 100 различных тестовых фраз и , в случае их наличия, эти фразы заменяются на определенных другие текстовые фразы. Реально ли данную задачу реализовать через командную строку? Какие варианты предложите? |
|
Отправлено: 05:04, 17-06-2019 |
Ветеран Сообщения: 2733
|
Профиль | Отправить PM | Цитировать Попробуйте. Это решение именно для этой структуры Вашего файла
@Echo Off cls SetLocal EnableExtensions,EnableDelayedExpansion CHCP 1251 >nul Set "BoxIn=Z:\Box_In" Set "BoxOut=Z:\Box_Out" Set "BoxArc=Z:\Box_Arc" Set "Mask=incoming*.txt" 2>nul Md "%BoxOut%" 2>nul Md "%BoxArc%" Call :Replacement FOR %%f IN ("%BoxIn%\%Mask%") DO ( Echo ========= "%%f" >"%BoxOut%\%%~nxf" (FOR /F "usebackq tokens=1,2,3,4,5,6,7,8,9,10 delims=;=" %%i IN ("%%f") DO ( Set "ssl=%%l" Set "ssn=%%n" Call :Substitute "ssl" "%%%%l%%" Call :Substitute "ssn" "%%%%n%%" Echo %%i=%%j;%%k=!ssl!;%%m=!ssn!;%%o=%%p;%%q=%%r; )) Move /Y "%%f" "%BoxArc%\" ) EndLocal pause Exit /B :Substitute If Not "%~2"=="" Set "%~1=%~2" Exit /B :Replacement Set "voronez=Воронеж" Set "tver=Тверь" Set "rostov=Ростов" Set "sochi=Сочи" Exit /B |
------- Последний раз редактировалось megaloman, 17-06-2019 в 17:06. Отправлено: 16:59, 17-06-2019 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать Вау, скрипты все сложнее..как тибетская клинопись. )
Не работает скрипт - пишет "для продолжения нажмите кнопку" и закрывается |
Отправлено: 17:10, 17-06-2019 | #12 |
Ветеран Сообщения: 2733
|
Профиль | Отправить PM | Цитировать Цитата Stolc:
|
|
------- Отправлено: 17:17, 17-06-2019 | #13 |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать Да, пары переделал. В InBox файлы есть. Кодировка 1251. В OutBox не попадают файлы.
|
Отправлено: 17:21, 17-06-2019 | #14 |
Ветеран Сообщения: 2733
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
------- Последний раз редактировалось megaloman, 17-06-2019 в 17:32. Отправлено: 17:23, 17-06-2019 | #15 |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать Беру паузу до завтра. Попробую разобраться позже. Спасибо за помощь!
|
Отправлено: 17:31, 17-06-2019 | #16 |
Новый участник Сообщения: 22
|
Профиль | Отправить PM | Цитировать В общем, попробовал через vbs-скрипт сделать замену в файлах. Все работает на ура.
Создал файл replace.vbs
и через bat-файл запускаю его, указав в качестве параметра имя файла. |
Отправлено: 12:27, 18-06-2019 | #17 |
Ветеран Сообщения: 2733
|
Профиль | Отправить PM | Цитировать Цитата Stolc:
Вот вариант. Обрабатываются все файлы в инбоксе, обработанные идут в аутбокс, исходный перемещается в архив.
Это чистый vbs, CMD не задействован BoxIn = "Z:\Box_In" BoxOut = "Z:\Box_Out" BoxArc = "Z:\Box_Arc" RegExp = "incoming.*\.txt" Mre = Array("voronez", "Воронеж", _ "tver", "Тверь", _ "rostov", "Ростов", _ "sochi", "Сочи", _ "moskva", "Москва", _ "orel", "Орел") Set Mask = CreateObject("VBScript.RegExp") Mask.Pattern = RegExp Mask.IgnoreCase = True Mask.Global = True j = 0 With CreateObject("Scripting.FileSystemObject") Set Fold = .GetFolder(BoxIn) Set Files = Fold.Files For Each iFile In Files ' Цикл по файлам в папке (как вариант решения) If Mask.Test(iFile.Name) Then Set Fin = .OpenTextFile(iFile, 1, False) Text = Fin.ReadAll Fin.Close For i = LBound(Mre) To UBound(Mre) Step 2 Text = Replace(Text, Mre(i), Mre(i + 1)) Next Set Fout = .OpenTextFile(BoxOut + "\" + iFile.Name, 2, True) Fout.Write Text Fout.Close If .FileExists(BoxArc + "\" + iFile.Name) Then .DeleteFile BoxArc + "\" + iFile.Name, True .MoveFile iFile, BoxArc + "\" j = j + 1 End If Next End With MsgBox "Обработано " + CStr(j) + " файлов" |
|
------- Отправлено: 16:12, 18-06-2019 | #18 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
TextReplace - Программа для поиска и замены текста в любых файлах | AZJIO | AutoIt | 6 | 02-02-2018 20:56 | |
Любой язык - скрипт для замены текста в файле | batyaPS | Скриптовые языки администрирования Windows | 19 | 10-01-2015 06:27 | |
Любой язык - Скрипт для замены | Kira1 | Скриптовые языки администрирования Windows | 2 | 15-07-2013 18:39 | |
2003/XP/2000 - Макрос Excel для преобразования колонки текста в число в dbf файлах | aRHangel2013 | Microsoft Office (Word, Excel, Outlook и т.д.) | 8 | 11-01-2013 17:07 | |
C/C++ - Поиск текста в файлах | student_po | Программирование и базы данных | 6 | 04-09-2009 23:33 |
|