Показать полную графическую версию : [решено] Увеличение значения имени переменной или считывание строки файла в переменную
Уже часа 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%" используется более сложная конструкция.
Если это покажется проще, то сделайте пожалуйста цикл вытаскивания переменной из файла, новая строчка-новое значение переменной(так же ":" или ";" разделителями могу сделать в файле).
Буду очень признателен:)
Нужно, что бы выводилась переменные в цикле, т.е. в идеал должна программа быть такой: »
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:
А вообще не понятно, что именно Вам нужно. »
Файле 1.po происходит замена одного слова(textN), после файл компилируется в 1.mo и вместе с окружающими файлами архивируется в textN.rar
VokaMut, понятней не стало. Что именно у Вас не получается?
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 можно опустить
Что такое «rerep» и откуда оно берётся? Ибо в первый раз она появляется из ниоткуда и уже сразу участвует в присваивании.
Так что:
но в итоге переменная find:
set find=%rerep%
Получается пустая... »
ничего другого ожидать не приходится.
ничего другого ожидать не приходится. »
Заменил на:
set find=%replace%
Все равно в итоге переменная пустая, даже слово(findword) заменяется на пустое место
http://img339.imageshack.us/img339/9246/123il.png
Все равно в итоге переменная пустая »
Так и должно быть!
1 setlocal enabledelayedexpansion должно быть в начале кода
2 Присвоение переменной set replace=%%i происходит в блоке первого for и, для правильного ее использования в дальнейшем внутри блока, она должна использоваться в знаках "!", а не в "%".
3 В строке set TMPR=!LINE:%find%=%replace%! переменную %replace% (!replace!) использовать затруднительно. Попробуйте так: set TMPR=!LINE:%find%=%%i!
В итоге получилось:
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" и т.д...
Все равно итоге переменной find новое значение не присваивается и программа продолжает искать слово "123, заменяет на "234", потом снова ищет "123" и уже пытается заменить на "345" и т.д... »
Вы чего хотели добиться-то? Я, например, так и не понял конечной Вашей цели. И сейчас не понимаю. Полагал, что пониманию поможет выложенный Вами код, но этого не случилось.
переменной find новое значение не присваивается »
Она тоже присваивается внутри блока, а используете Вы ее опять в "%"set TMPR=!LINE:%find%=%%i! »
Вы чего хотели добиться-то? »
Я, к сожалению, тоже не смог понять постановку задачи.
VokaMut, сформулируйте ее четко, прикрепите файл file.po в архиве, что бы можно было проверять на Вашем файле.
Вы чего хотели добиться-то? Я, например, так и не понял конечной Вашей цели. И сейчас не понимаю. Полагал, что этому поможет выложенный Вами код, но этого не случилось. »
Давайте на чистоту.
Я являюсь одним из создателей модификаций интерфейса игры WOT.
По началу их было с десяток, но сейчас уже 78 и каждая по 2 варианта, т.е. 156 вариантов модификаций.
Вручную я их обрабатывал бы часа 2 и по этому автоматизировал архивацию (http://forum.oszone.net/thread-243807.html) папки с модом(измененный файл,файлы,инструкция).
Это сократило время в 4 раза и теперь всего пол часа всё это занимает.
Но я всё равно хочу ускорить процесс по максимуму.
На QT тоже не получилось написать.
Написал на php, проблема решена.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.