Показать полную графическую версию : [решено] обработка в подстроке
pageYK@fb
27-07-2016, 17:10
Есть файл 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
@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
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
@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^|
)
Увы, приходится домысливать постановку за Вас.Нужно вычесть из этого числа 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
megaloman, вот так
277|12571301873242|394|dfbfdbdfbdsfsdff||
277|12571301873242|394|dfbfdbdfbdsfsdff||
277|12571301873242|111|dfbfdbdfbdsfsdff||
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
вот так » Ом мани падме хум! @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
megaloman, alpap, просто монстры! :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.