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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Редактирование excel`евской формулы, или тройной вложенный цикл (http://forum.oszone.net/showthread.php?t=285029)

osob1 14-07-2014 11:45 2376300

Редактирование excel`евской формулы, или тройной вложенный цикл
 
Доброго времени суток. Есть небольшая задача.
Суть задачи в том, что имеется excel`евская формула (точнее для googlesheets). В ней, кроме всего остального, есть 4 пары чисел, которые нужно заменить по принципу n=n+1
То есть, к примеру, 345 346 347 348 на 349 350 351 352. Затем на 353 354 355 356 и т.д. И таких проходов 50. Соответственно, вручную очень даже тягостно менять 200 чисел.
Утренняя задумка по автоматизации процесса немного не удалась.

Код:

@echo off
title Edit formuls
setlocal enabledelayedexpansion

set infile=inputfile.txt
set TMPFL=tempfile.txt
set newfile=newfile.txt
set find=348
set replace=352

copy !infile! !infile!.bak
copy !infile! !TMPFL!

pause

for /L %%i in (1,1,50) do (
        for /L %%j in (1,1,4) do (
                for /F "tokens=* delims=," %%n in (!TMPFL!) do (
                        set LINE=%%n
                        set TMPR=!LINE:%find%=%replace%!
                        set /A find=!find!-1
                        set /A replace=!replace!-1
                        echo !TMPR!>!TMPFL!
                )
        )
        echo !TMPR!>>!newfile!
        echo.>>!newfile!
        set /A find=!find!+7
)

cls
echo Complete!
pause
exit

В выходном файле получаем 50 одинаковых формул.
Если необходимо, прикрепляю саму формулу (inputfile).

Код:

=IF(A15=$Z$345; $AD$345; (IF(A15=$Z$346; $AD$346; (IF(A15=$Z$347; $AD$347; (IF(A15=$Z$348; $AD$348; (IF(A15=$AF$345; $AJ$345; (IF(A15=$AF$346; $AJ$346; (IF(A15=$AF$347; $AJ$347; (IF(A15=$AF$348; $AJ$348; 0)))))))))))))))
"Протащить" ее не вариант. Даже дело не в том, что ссылки на ячейки абсолютные. (Хотя это одно из необходимых условий, но уже для другого). В общем, прошу помощи по батнику.
Собственно причина его неработоспособности была найдена. В третьем цикле, переменным find и replace не присваиваются новые значения. Гугл помог только в сторону setlocal enabledelayedexpansion. Если расширенную обработку включать именно в цикле, то вываливается в превышение рекурсии.


Время: 21:07.

Время: 21:07.
© OSzone.net 2001-