Показать полную графическую версию : [решено] Вставить слово между текстом
minutka15
22-11-2022, 13:33
Всем доброго дня
Имеется текстовый файл такого порядка:
1=имя
2=имя
3=имя
и так далее..
Как вставить слово между - например:
1=слово\имя
2=слово\имя
3=слово\имя
То есть нужно вставить одно и тоже слово после =
В начало и в конец строки я могу, но как добавить слово между ?
Буду благодарен за помощь!
megaloman
22-11-2022, 22:18
@Echo Off
cls
Set "FileIn=Z:\Box_In\Имеется текстовый файл такого порядка.txt"
Set "WordIn=слово\"
>"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
If Not "%%j"=="" (Echo %%i=%WordIn%%%j) Else (%%i)
))
>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B
minutka15
22-11-2022, 22:45
megaloman,
С первого раза заработало! Супер!
Все коды с заменой текста перелопатил но все они не подходили в случае с '='
Либо была ошибка либо вообще ничего.
Спасибо огромное! пойду дальше ковырять.
minutka15
22-11-2022, 23:12
У меня есть одна задача с которой мне никак в одиночку не справится.
Не хочу выглядеть как-бы посади его за стол а он и ноги на стол.
в общем если есть время и нервы:
В этом текстовом файле возможны более 200 имен
Есть текстовый файл с примерно вот такой переченью:
1=первое_имя
2=второе_имя
3=третье_имя
4=четвертое_имя
5=пятое_имя
ну и т.д
тут внизу список, мы сами его составили и он меняться не будет тогда как верхний список будет сгенерирован.
Однако получим мы те-же имена с нижнего списка но неизвестно какие и сколько.
ниже этого листа те-же имена но с дополнениями. Дополнительные имена мы тоже знаем.
1=первое_имя +дополнительное слово
2=второе_имя +дополнительное слово
3=третье_имя +дополнительное слово
4=четвертое_имя +дополнительное слово
5=пятое_имя +дополнительное слово
Так вот, задача такая что-бы в верхний список мы добавили +дополнительным словом из нижнего списка
в зависимости какое имя выпало.
Как бы нужно просканировать верхний список с нижним и если он найден добавить к нему дополнительное слово.
Возможно ли решить такую задачу?
megaloman
23-11-2022, 00:03
@Echo Off
cls
Set "FileIn=Z:\Box_In\непостоянный файл.txt"
Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
>"%FileIn%.tmp" (FOR /F "usebackq delims=" %%i In ("%FileIn%") DO (
FindStr /B /I "%%i" "%Fsprav%" ||Echo %%i
))
>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B
minutka15
23-11-2022, 01:25
@Echo Off
cls
Set "FileIn=Z:\Box_In\непостоянный файл.txt"
Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
>"%FileIn%.tmp" (FOR /F "usebackq delims=" %%i In ("%FileIn%") DO (
FindStr /B /I "%%i" "%Fsprav%" ||Echo %%i
))
>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B »
Все на столько четко что я и не ожидал!
Но есть одна загвоздка и вот какая:
Дело в том, что генерируемый текст не совпадает с постоянным из-за:
1=первое_имя
2=второе_имя
3=третье_имя
Потому, что Х=имя не будет под таким же номером как в постоянном.
К примеру постоянный номер у 85= в генерируемом может стать 14= или какой угодно.
В общем я удалил в обоих текстах все "1= 2= 3= и тд." и оставил только названия.
И вот запуская батник все делается точь в точь как я и хотел!
Подводя итоги - Батник нужно переделать с учетом изменений:
1) Подготавливаю постоянный файл без "1= 2= 3="
2) Запуском скрипта из непостоянного файла нужно удалить все "Х=" и затем скрипт продолжает свою работу.
3) По завершению пронумеровываем обратно как должно быть в окончательном варианте то есть 1= 2= 3= и тд.
Третье действие я смогу припаять самостоятельно.
Осталось недоделанным 2е действие по удалению 1= 2= 3= из генерируемого.txt (по другому никак нельзя он только так и генерируется)
Признаюсь в своей безграмотности, самостоятельно с этой задачей я бы не справился никогда.
megaloman
23-11-2022, 09:52
@Echo Off
cls
Set "FileIn=Z:\Box_In\непостоянный файл.txt"
Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
>"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
<nul Set /P Str=%%i=
FindStr /B /I "%%j " "%Fsprav%" ||Echo %%j
))
>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B1=Алиса
2=Саша
3=третье_имя
4=dfygt3
5=Сергей
6=ejhgrgej
7=Петя
Аня +дополнительное слово 1
Ася +дополнительное слово 2
Саша +дополнительное слово 3
Вася +дополнительное слово 4
Петя +дополнительное слово 5
Ваня +дополнительное слово 6
Инокентий +дополнительное слово 7
Филипп +дополнительное слово 8
Алиса +дополнительное слово 9
Эллис +дополнительное слово 10
Сергей +дополнительное слово 11
1=Алиса +дополнительное слово 9
2=Саша +дополнительное слово 3
3=третье_имя
4=dfygt3
5=Сергей +дополнительное слово 11
6=ejhgrgej
7=Петя +дополнительное слово 5
minutka15
23-11-2022, 12:44
megaloman,
Отлично!
А можно подкорректировать батник таким образом что-бы в последнем действии добавлялось то что я описывал в своем самом первом посту + pdf ?
То есть где
1=Алиса +дополнительное слово 9
было
1=мое-слово\Алиса.pdf +дополнительное слово 9
мое-слово будет единым для всех имен.
--
Да и вот еще что
в завершенном файле в самом начале получаю
[AllNames]=ђҐ¦Ё¬ ўлў®¤* Є®¬**¤ ** нЄа** (ECHO) ®вЄ«озҐ*.
То есть крякозябры. Дело в том что когда генерируется "непостоянный файл.txt" то в самом верху прописано:
[AllNames]
а ниже
1=имя
2=имя
[AllNames] Должно оставаться нетронутым в самом верху.
Просто предпоследнее действие батника - удаление первой строки и затем добавление первой строки [AllNames]
Решил добавив команду внизу скрипта
powershell "Get-ChildItem непостоянный файл.txt | ForEach-Object { $f=$_ | Get-Content -ReadCount 0; $f[0]='[AllNames]'; Set-Content $_.FullName $f }"
..
megaloman
23-11-2022, 17:36
@Echo Off
cls
Set "FileIn=Z:\Box_In\непостоянный файл.txt"
Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
Set "WordIn=слово\"
>nul 2>&1 Find "=%WordIn%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
>"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
If "%%j"=="" (Echo %%i
) Else (
<nul Set /P Str=%%i=%WordIn%
FindStr /B /I "%%j " "%Fsprav%" ||Echo %%j
)
))
>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B
minutka15
23-11-2022, 17:53
megaloman
Все что нужно!
Скрипт работает суперски. 140 строк как часики заполнились и везде все как надо !
Вот что значит поддержка мастера.
В моем проекте всегда была эта задача как самая трудная и из за этого я всегда откладывал в надежде найти другой способ.
Но как оказалось все решил этот скрипт.
Без вашей помощи я продолжал бы вынюхивать информацию по различным форумам в надежде найти адекватного специалиста!
Огромная вам благодарность за помощь которую вы мне оказали!
minutka15
24-11-2022, 20:28
megaloman
А можно сделать одно действие если в тексте "постоянный справочник.txt" имеется например такое имя:
1=_Саша
Когда такое имя которое начинается с символом _имя выпадет в "непостоянный файл.txt" то мы просто создаем текстовый файл _имя.txt в той же папке.
и это имя не вносим в преобразованный файл.
megaloman
25-11-2022, 16:12
@Echo Off
cls
Set "FileIn=Z:\Box_In\непостоянный файл.txt"
Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
Set "WordIn=слово\"
>nul 2>&1 Find "=%WordIn%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
For %%d In ("%FileIn%") Do (
FOR /F "usebackq tokens=1* delims==" %%i In (`2^>nul findstr "=_" "%FileIn%"`) DO >"%%~dpd%%j.txt" cd.
)
Set /A N=0
>"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In (`2^>nul findstr /V "=_" "%FileIn%"`) DO (
If "%%j"=="" (Echo %%i
) Else (
Call Set /A N+=1
<nul Call Set /P Str=%%N%%=%WordIn%
FindStr /B /I "%%j " "%Fsprav%" ||Echo %%j
)
))
>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B
minutka15
25-11-2022, 18:27
megaloman
Спасибо большое, однако эти имена вносятся в завершенный список чего следует исключить.
В моем проекте не предусмотрен вариант где можно отменить действие с существующим именем в завершенном списке.
Хотя если поправить в завершенном списке эти имена:
вместо
1=_Саша вписывать F1=1, _Саша превращается в F1
Чтобы все имена с началом _
получались в завершенном списке
F1=1
F2=1
F3=1
Как вариант можно сделать отдельный батник для таких _имя файлов и отдельный завершенный список.
В проекте я могу запустить его второй командой и получить второй список. это не страшно.
megaloman
25-11-2022, 19:20
Для началаПодготавливаю постоянный файл без "1= 2= 3=" »
А можно сделать одно действие если в тексте "постоянный справочник.txt" имеется например такое имя:
1=_Саша »Но вы противоречите сами себе. Я понимаю так:Аня +дополнительное слово 1
Ася +дополнительное слово 2
Саша +дополнительное слово 3
Вася +дополнительное слово 4
Петя +дополнительное слово 5
Ваня +дополнительное слово 6
Инокентий +дополнительное слово 7
Филипп +дополнительное слово 8
Алиса +дополнительное слово 9
Эллис +дополнительное слово 10
Сергей +дополнительное слово 11
[AllNames]
1=Алиса
2=Саша
3=_Марина
4=третье_имя
5=dfygt3
6=Сергей
7=_Вера
8=ejhgrgej
9=Петя
[AllNames]
1=слово\Алиса +дополнительное слово 9
2=слово\Саша +дополнительное слово 3
3=слово\третье_имя
4=слово\dfygt3
5=слово\Сергей +дополнительное слово 11
6=слово\ejhgrgej
7=слово\Петя +дополнительное слово 5
Как видите, нет там этих строк. Файлы создаются. Мне не надо предлагать, Как решить. Мне надо понимать:
Что Имеем
Что надо получить, а то тихо шифером шурша крыша едет неспеша, приходится фантазировать.
minutka15
25-11-2022, 19:35
megaloman,
Я извиняюсь.
Но вы противоречите сами себе
Я не только себе противоречу но и логике))
Совершенно верно.
Дело в том, что я поправил для себя исключение _ в виде _М в скрипте в верхней части
а в нижней части забыл поправить
>"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In (`2^>nul findstr /V "=_" "%FileIn%"`) DO (
вот и стал велосипед изобретать. Как говорится старость не радость...
Все супер, скрипт работает четко и без помех!
minutka15
25-11-2022, 22:31
Уважаемый megaloman,
У меня последняя просьба.
В виду того что я тут по своей же вине напортачил, оказалось что для таких 1=_Саша создавать текстовый файл не нужно.
Извиняюсь что ошибся, понял только после дальнейшего анализа. Однако для смогу задействовать такой скрипт если вдруг понадобится.
Все что нужно это задействовать в скрипте второй (Set "WordIn2=слово\") для слов которые начинаются с _имя.
И эти слова в завершенном списке как и все другие, но начальное слово будет отличаться от других.
то есть если у нас
1=слово\Алиса +дополнительное слово
то в
2=слово2\_Имя +дополнительное слово
Я самостоятельно смог бы наковырять второй батник из строчек, однако хотелось бы завершить весь сценарий одним скриптом.
megaloman
26-11-2022, 10:47
@Echo Off
cls
Set "FileIn=Z:\Box_In\непостоянный файл.txt"
Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
Set "WordIn=слово\"
Set "WordIn_=выражение\"
>nul 2>&1 Find "=%WordIn%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
>nul 2>&1 Find "=%WordIn_%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
>"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
If "%%j"=="" (Echo %%i
) Else (
Set "WordAdd=%WordIn%"
Echo %%j|>nul 2>nul FindStr /B "_"&&Set "WordAdd=%WordIn_%"
<nul Call Set /P Str=%%i=%%WordAdd%%
FindStr /B /I "%%j " "%Fsprav%" ||Echo %%j
)
))
>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B
Аня +дополнительное слово 1
Ася +дополнительное слово 2
Саша +дополнительное слово 3
Вася +дополнительное слово 4
_Петя +дополнительное слово 5
Ваня +дополнительное слово 6
Инокентий +дополнительное слово 7
_Филипп +дополнительное слово 8
Алиса +дополнительное слово 9
Эллис +дополнительное слово 10
Сергей +дополнительное слово 11
Вера +дополнительное слово 12
Марина +дополнительное слово 13[AllNames]
1=Алиса
2=Саша
3=_Филипп
4=dfygt3
5=Сергей
6=ejhgrgej
7=_Петя[AllNames]
1=слово\Алиса +дополнительное слово 9
2=слово\Саша +дополнительное слово 3
3=выражение\_Филипп +дополнительное слово 8
4=слово\dfygt3
5=слово\Сергей +дополнительное слово 11
6=слово\ejhgrgej
7=выражение\_Петя +дополнительное слово 5
minutka15
26-11-2022, 15:17
megaloman,
Вот Спасибо!
После того как это действие выполняется на все 100% - мой проект ожил после долгой спячки.
Как раз то что хотел иметь долгое время но никак не получалось.
Благодарю из глубины души !
Жму руку!
minutka15
02-12-2022, 00:50
@Echo Off
cls
Set "FileIn=Z:\Box_In\непостоянный файл.txt"
Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
Set "WordIn=слово\"
Set "WordIn_=выражение\"
>nul 2>&1 Find "=%WordIn%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
>nul 2>&1 Find "=%WordIn_%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
>"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
If "%%j"=="" (Echo %%i
) Else (
Set "WordAdd=%WordIn%"
Echo %%j|>nul 2>nul FindStr /B "_"&&Set "WordAdd=%WordIn_%"
<nul Call Set /P Str=%%i=%%WordAdd%%
FindStr /B /I "%%j " "%Fsprav%" ||Echo %%j
)
))
>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B »
Если вас не затруднит могли бы вы показать каким образом можно переделать поисковое слово например:
Set "WordIn_=выражение\" где мы ищем первую букву _
Echo %%j|>nul 2>nul FindStr /B "_"&&Set "WordAdd=%WordIn_%"
Заменить на поисковое слово ".chm" в конце слова...
Одним словом вместо поиска значения в начале слова "_" искать только расширения файлов *.chm
megaloman
04-12-2022, 18:43
@Echo Off
cls
Set "FileIn=Z:\Box_In\непостоянный файл.txt"
Set "Fsprav=Z:\Box_In\постоянный справочник.txt"
Set "WordIn=слово\"
Set "WordInChm=выражение\"
Set "Chm=.Chm"
>nul 2>&1 Find "=%WordIn%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
>nul 2>&1 Find "=%WordInChm%" "%FileIn%" &&(Echo File "%FileIn%" has already been processed &Pause &Exit /B)
>"%FileIn%.tmp" (FOR /F "usebackq tokens=1* delims==" %%i In ("%FileIn%") DO (
If "%%j"=="" (
Echo %%i
) Else (
>nul FindStr /I /C:"%%j%Chm% " "%Fsprav%"&&(<nul Call Set /P Str=%%i=%WordInChm%&FindStr /I /C:"%%j%Chm%" "%Fsprav%")
>nul FindStr /I /C:"%%j%Chm%" "%Fsprav%"||(
>nul FindStr /I "%%j " "%Fsprav%"||(Echo %%i=%%j)
>nul FindStr /I "%%j " "%Fsprav%"&&(<nul Call Set /P Str=%%i=%WordIn%&FindStr /I /C:"%%j" "%Fsprav%")
))
))
>nul Move /Y "%FileIn%.tmp" "%FileIn%"
pause
Exit /B
"непостоянный файл.txt" [AllNames]
1=Алиса
2=Саша
3=Филипп
4=dfygt3
5=Сергей
6=ejhgrgej
7=Петя
"постоянный справочник.txt"Аня +дополнительное слово 1
Ася +дополнительное слово 2
Саша +дополнительное слово 3
Вася +дополнительное слово 4
Петя.chm +дополнительное слово 5
Ваня +дополнительное слово 6
Инокентий +дополнительное слово 7
Филипп.chm +дополнительное слово 8
Алиса +дополнительное слово 9
Эллис +дополнительное слово 10
Сергей +дополнительное слово 11
Вера +дополнительное слово 12
Марина +дополнительное слово 13
"непостоянный файл.txt" после обработки[AllNames]
1=слово\Алиса +дополнительное слово 9
2=слово\Саша +дополнительное слово 3
3=выражение\Филипп.chm +дополнительное слово 8
4=dfygt3
5=слово\Сергей +дополнительное слово 11
6=ejhgrgej
7=выражение\Петя.chm +дополнительное слово 5
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.