Компьютерный форум 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=246633)

VokaMut 10-11-2012 14:47 2022853

Увеличение значения имени переменной или считывание строки файла в переменную
 
Уже часа 2 держу открытым OSzone и пытаюсь сам добиться своего, но одно осталось нерешенным:
Код:

set var1=text1
set var2=text2
set var3=text3
set var4=text4
for /l %%i in (1,1,4) do (
        set text=!var%%i!
        echo %text%
)

Подобный код нашел в одной из тем.

Нужно, что бы выводилась переменные в цикле, т.е. в идеал должна программа быть такой:
Код:

echo text1
echo text2
echo text3
echo text4

Но переменных "var*" 78 штук и вместо "echo %text%" используется более сложная конструкция.

Если это покажется проще, то сделайте пожалуйста цикл вытаскивания переменной из файла, новая строчка-новое значение переменной(так же ":" или ";" разделителями могу сделать в файле).
Буду очень признателен:)

Iska 10-11-2012 15:53 2022882

Цитата:

Цитата VokaMut
Нужно, что бы выводилась переменные в цикле, т.е. в идеал должна программа быть такой: »

Код:

set var01=text1
set var02=text2
set var03=text3
set var04=text4
set var09=text9
set var10=text10
set var11=text11
set var99=text99

for /f "tokens=2* delims==" %%i in ('set var') do echo %%i

А вообще не понятно, что именно Вам нужно.

VokaMut 10-11-2012 16:28 2022900

Цитата:

Цитата Iska
Цитата VokaMut:
А вообще не понятно, что именно Вам нужно. »

Файле 1.po происходит замена одного слова(textN), после файл компилируется в 1.mo и вместе с окружающими файлами архивируется в textN.rar

Iska 10-11-2012 17:49 2022949

VokaMut, понятней не стало. Что именно у Вас не получается?

VokaMut 11-11-2012 08:15 2023302

Цитата:

Цитата Iska
VokaMut, понятней не стало. Что именно у Вас не получается? »

Код:

chcp 866

::файл для редактирования
set infile=1\file.po

::первое слово которое ищем в файле для замены
set find=findword

::последующие
set var1=Слово1
set var2=Слово2
set var3=Слово3
set var4=Слово4

::цикл проходит по каждой переменной выше
for /f "tokens=2* delims==" %%i in ('set var') do (
::задаем заменяющее слово
set replace=%%i

::заменяем его
@echo off
setlocal enabledelayedexpansion
for /F "tokens=* delims=," %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%find%=%replace%!
echo !TMPR!>>tmp.txt
)
move tmp.txt %infile%

::преобразуем file.po в file.mo
msgfmt file.po -o file.mo

::архивируем всю папку с этим файлом и исключаем file.po
"C:\PROGRA~1\WinRAR\rar.exe" a -m5 -s -y -ep1 -r -x*"file.po" "2\%replace%.rar" "1\*.*"

::теперь ищем заменяеющее слово и заменяем его на следующее
set find=%rerep%

::сделал паузу для проверки
pause
)

После просмотра увидел что:
Код:

set replace=%%i
Задается правильно, но в итоге переменная find:
Код:

set find=%rerep%
Получается пустая...

Для проверки работоспособности архивирование и компилирование из po в mo можно опустить

Iska 11-11-2012 08:28 2023303

Что такое «rerep» и откуда оно берётся? Ибо в первый раз она появляется из ниоткуда и уже сразу участвует в присваивании.

Так что:
Цитата:

Цитата VokaMut
но в итоге переменная find:
Код:

set find=%rerep%
Получается пустая... »

ничего другого ожидать не приходится.

VokaMut 11-11-2012 08:51 2023307

Цитата:

Цитата Iska
ничего другого ожидать не приходится. »

Заменил на:
Код:

set find=%replace%
Все равно в итоге переменная пустая, даже слово(findword) заменяется на пустое место


gora 11-11-2012 09:27 2023317

Цитата:

Цитата VokaMut
Все равно в итоге переменная пустая »

Так и должно быть!
1
Код:

        setlocal enabledelayedexpansion
должно быть в начале кода
2 Присвоение переменной
Код:

        set replace=%%i
происходит в блоке первого for и, для правильного ее использования в дальнейшем внутри блока, она должна использоваться в знаках "!", а не в "%".
3 В строке
Код:

                set TMPR=!LINE:%find%=%replace%!
переменную %replace% (!replace!) использовать затруднительно. Попробуйте так:
Код:

                set TMPR=!LINE:%find%=%%i!

VokaMut 11-11-2012 10:00 2023325

В итоге получилось:
Код:

chcp 866
setlocal enabledelayedexpansion
set infile=file.po

set find=123

set var01=234
set var02=345
set var03=567
set var04=678

for /f "tokens=2* delims==" %%i in ('set var') do (

for /F "tokens=* delims=," %%n in (!infile!) do (
set LINE=%%n
set TMPR=!LINE:%find%=%%i!
Echo !TMPR!>>TMP.TXT
)
move TMP.TXT %infile%

set find=!i!

pause
)

Все равно итоге переменной find новое значение не присваивается и программа продолжает искать слово "123, заменяет на "234", потом снова ищет "123" и уже пытается заменить на "345" и т.д...

Iska 11-11-2012 10:14 2023330

Цитата:

Цитата VokaMut
Все равно итоге переменной find новое значение не присваивается и программа продолжает искать слово "123, заменяет на "234", потом снова ищет "123" и уже пытается заменить на "345" и т.д... »

Вы чего хотели добиться-то? Я, например, так и не понял конечной Вашей цели. И сейчас не понимаю. Полагал, что пониманию поможет выложенный Вами код, но этого не случилось.

gora 11-11-2012 10:20 2023333

Цитата:

Цитата VokaMut
переменной find новое значение не присваивается »

Она тоже присваивается внутри блока, а используете Вы ее опять в "%"
Цитата:

Цитата VokaMut
set TMPR=!LINE:%find%=%%i! »

Цитата:

Цитата Iska
Вы чего хотели добиться-то? »

Я, к сожалению, тоже не смог понять постановку задачи.
VokaMut, сформулируйте ее четко, прикрепите файл file.po в архиве, что бы можно было проверять на Вашем файле.

VokaMut 11-11-2012 10:24 2023336

Цитата:

Цитата Iska
Вы чего хотели добиться-то? Я, например, так и не понял конечной Вашей цели. И сейчас не понимаю. Полагал, что этому поможет выложенный Вами код, но этого не случилось. »

Давайте на чистоту.
Я являюсь одним из создателей модификаций интерфейса игры WOT.
По началу их было с десяток, но сейчас уже 78 и каждая по 2 варианта, т.е. 156 вариантов модификаций.
Вручную я их обрабатывал бы часа 2 и по этому автоматизировал архивацию папки с модом(измененный файл,файлы,инструкция).
Это сократило время в 4 раза и теперь всего пол часа всё это занимает.
Но я всё равно хочу ускорить процесс по максимуму.

VokaMut 26-11-2012 15:54 2033216

На QT тоже не получилось написать.
Написал на php, проблема решена.


Время: 05:25.

Время: 05:25.
© OSzone.net 2001-