Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] обработка в подстроке (http://forum.oszone.net/showthread.php?t=317218)

pageYK@fb 27-07-2016 17:10 2654566

обработка в подстроке
 
Есть файл 1.txt с текстом вида:

261|12571301873099|315|abcacabjac||
262|12571301873105|345|sgdfgdfgdfg||
263|12571301873112|368|dsgsdgsdgs||
264|12571301873129|380|sdgsdgdsgs||
265|12571301873136|382|fasfasfasfas||
266|12571301873143|453|gdbdfbndfb||
267|12571301873167|459|dfbfdbfdbdffdb||
268|12571301873181|462|dfbfdbdfbdfbdf||
269|12571301873204|601|fdbdfbdfbdfbfdd||
270|12571301873228|731|dfbfdbdfbfdbdfbd||
271|12571301873242|770|dfbfdbdfbdsfsdff||

надо парсить строки где третье число >394,
Нужно вычесть из этого числа 394, и сделать дубль строки с остатком, если остается опять больше 394, то повторяем.

megaloman 27-07-2016 20:07 2654619

Код:

@echo off

Set "File=1.txt"
Set "FileOut=1.new.txt"

Set /A MM=394

SetLocal EnableDelayedExpansion

Del "%FileOut%" 2>nul
FOR /F "usebackq tokens=1,2,3,4,5 delims=|" %%i IN ("%File%") DO (
        Set /A kk=%%k-%%k/%MM%*%MM%
        >>"%FileOut%" Echo %%i^|%%j^|!kk!^|%%l^|%%m^|
)


pageYK@fb 28-07-2016 10:30 2654770

megaloman, все верно, только надо строки с 394 оставлять,
т.е. должно получиться так

261|12571301873099|315|abcacabjac||
262|12571301873105|345|sgdfgdfgdfg||
263|12571301873112|368|dsgsdgsdgs||
264|12571301873129|380|sdgsdgdsgs||
265|12571301873136|382|fasfasfasfas||
266|12571301873143|394|gdbdfbndfb||
266|12571301873143|59|gdbdfbndfb||
267|12571301873167|394|dfbfdbfdbdffdb||
267|12571301873167|65|dfbfdbfdbdffdb||
268|12571301873181|394|dfbfdbdfbdfbdf||
268|12571301873181|68|dfbfdbdfbdfbdf||
269|12571301873204|394|fdbdfbdfbdfbfdd||
269|12571301873204|207|fdbdfbdfbdfbfdd||
270|12571301873228|394|dfbfdbdfbfdbdfbd||
270|12571301873228|337|dfbfdbdfbfdbdfbd||
271|12571301873242|394|dfbfdbdfbdsfsdff||
271|12571301873242|376|dfbfdbdfbdsfsdff||

megaloman 28-07-2016 13:08 2654832

Код:

@echo off

Set "File=1.txt"
Set "FileOut=1.new.txt"

Set /A MM=394

SetLocal EnableDelayedExpansion

Del "%FileOut%" 2>nul
FOR /F "usebackq tokens=1,2,3,4,5 delims=|" %%i IN ("%File%") DO (
       
        Set /A kn=%%k/%MM%
        FOR /L %%a IN (!kn!,-1,1) DO (
                Set /A kk=%%a*%MM%
                >>"%FileOut%" Echo %%i^|%%j^|!kk!^|%%l^|%%m^|
        )

        Set /A kk=%%k-%%k/%MM%*%MM%
        If Not !kk! EQU 0 >>"%FileOut%" Echo %%i^|%%j^|!kk!^|%%l^|%%m^|
)

Увы, приходится домысливать постановку за Вас.
Цитата:

Цитата pageYK@fb
Нужно вычесть из этого числа 394, и сделать дубль строки с остатком, если остается опять больше 394, то повторяем. »

Я правильно понял, что если будет строка

277|12571301873242|999|dfbfdbdfbdsfsdff||

то в ответе надо иметь

277|12571301873242|788|dfbfdbdfbdsfsdff||
277|12571301873242|394|dfbfdbdfbdsfsdff||
277|12571301873242|211|dfbfdbdfbdsfsdff||

?????????

pageYK@fb 28-07-2016 16:10 2654903

megaloman, вот так
277|12571301873242|394|dfbfdbdfbdsfsdff||
277|12571301873242|394|dfbfdbdfbdsfsdff||
277|12571301873242|111|dfbfdbdfbdsfsdff||

alpap 28-07-2016 19:04 2654991

pageYK@fb,
Из написанного вами, выходит так надо действовать:
Код:

@echo off
set a=999
if %a% geq 394 set/a x=%a%/394& set/a y=%a%%%394
echo Повторов:%x:~,1%, остаток:%y%
pause>nul

но вот как ни крутил варианты, но не могу понять как у вас получается 111?

megaloman 28-07-2016 20:53 2655016

Цитата:

Цитата pageYK@fb
вот так »

Ом мани падме хум!
Код:

@echo off

Set "File=1.txt"
Set "FileOut=1.new.txt"

Set /A MM=394

SetLocal EnableDelayedExpansion

Del "%FileOut%" 2>nul
FOR /F "usebackq tokens=1,2,3,4,5 delims=|" %%i IN ("%File%") DO (
       
        Set /A kn=%%k/%MM%
        FOR /L %%a IN (!kn!,-1,1) DO (
                >>"%FileOut%" Echo %%i^|%%j^|%MM%^|%%l^|%%m^|
        )

        Set /A kk=%%k-%%k/%MM%*%MM%
        If Not !kk! EQU 0 >>"%FileOut%" Echo %%i^|%%j^|!kk!^|%%l^|%%m^|
)

alpap, ИМХО 211

lxa85 03-08-2016 16:28 2656554

megaloman, alpap, просто монстры! :)


Время: 23:28.

Время: 23:28.
© OSzone.net 2001-