0 / 0 / 0
Регистрация: 02.04.2013
Сообщений: 11
1

Не могу справиться с переменной

02.04.2013, 14:01. Показов 703. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
суть:
последний кусок кода, комментарием выделена строка (83)
переменная не желает принимать значение которое ей хочу присвоить (видно по выводу echo)

при этом отдельно данный кусок кода прекрасно себя чувствует.
подозрения падают на %K_ucastok% что тут может быть не так ? голову сломал

сам скрипт целиком:
Кликните здесь для просмотра всего текста

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
@set  author=Џ®«®¬®и*®ў Ђ.Ђ. 
@set  ver=0.1
@title [xml_sort]
@echo off
Color 0e
 
rem задаем переменные:
set File_name=file.xml
:: как бы имя проще получать ? так чтоб перетаскиваешь xml на
:: батник и батник в итоге получает имя xml файла
:: это что то типа:
:: set File_name=%1
set base_region=region.txt
set base_rayion=rayion.txt
set KPT=0
 
rem находим по тегу кадастровый номер:
For /F "tokens=2-5 Delims=<>:" %%a In ('find "<CadastralNumber>" ^<"%File_name%"') Do (
    set K_Region=%%a
    set K_Rayion=%%b
    set K_kvartal=%%c
    if %%d=="" (set KPT=1) else set K_uchastok=%%d
    goto :_ext1
)
:_ext1
rem выводим результат на экран:
if %KPT%==0 (
    echo ®, ¤*, нв® ‚›Џ€‘ЉЂ!!
    echo ====================
    echo %K_Region%:%K_Rayion%:%K_kvartal%:%K_uchastok%
    echo ====================
    echo.
)
if %KPT%==1 (
    echo ®, ¤*, нв® ЉЏ’!!
    echo ================
    echo %K_Region%:%K_Rayion%:%K_kvartal%
    echo ================
    echo.
)
 
rem находим название региона по номеру:
for /f "delims=] tokens=1*" %%a in ('find /n "%K_Region%" %base_region%') do (set T_Region=%%b)
set region=%T_Region:~4,50%
rem выводим результат на экран:
echo %T_Region:~1,50%
 
rem находим название района по номеру:
rem проверка на условный кад район
if %K_Rayion%==00 (
    set rayion=“б«®ў*л© Є*¤*бва®ўл© а*©®*
    echo 00=“б«®ў*л© Є*¤*бва®ўл© а*©®*
    goto :_ext2
)
for /f "delims=] tokens=1*" %%a in ('find /n "%K_Rayion%" %K_Region%_%base_rayion%') do (set T_Rayion=%%b)
set rayion=%T_Rayion:~4,50%
rem выводим результат на экран:
echo %T_Rayion:~1,50%
:_ext2
 
rem проверяем существует ли каталог:
rem %~p0
if NOT exist "%K_Region%_%region%\%K_Region%_%K_Rayion%_%rayion%\%K_Region%_%K_Rayion%_%K_kvartal%\" MD "%K_Region%_%region%\%K_Region%_%K_Rayion%_%rayion%\%K_Region%_%K_Rayion%_%K_kvartal%\"
 
rem подсчет количества символов в обозначении участка:
call :var_Count "%K_uchastok%" K_uchastok_zero
if %K_uchastok_zero%==1 set K_uchastok=000%K_uchastok%
if %K_uchastok_zero%==2 set K_uchastok=00%K_uchastok%
if %K_uchastok_zero%==3 set K_uchastok=0%K_uchastok%
goto :_ext3
 
:var_count
set var=%~1
if not defined var exit /b
set var=%var:~1%
set /a %2+=1
call :var_count "%var%" %2
exit /b
 
:_ext3
rem переименовываем файл:
if %KPT%==0 (
    set new_file_name=Љ‚‡“_%K_uchastok%_%date:~6,4%-%date:~3,2%-%date:~0,2%.xml
    echo Ќ®ў®Ґ Ё¬п д*©«*:=Љ‚‡“_%K_uchastok%_%date:~6,4%-%date:~3,2%-%date:~0,2%.xml
    echo Ќ®ў®Ґ Ё¬п д*©«*:=%new_file_name%
    rem именно тут каккая то проблема ^^
    rem т.е. в переменную не уходит значение
    echo %~p0%file_name%
    echo %~p0%new_file_name%
    ren %file_name% %new_file_name%
    pause
    move %new_file_name% "%K_Region%_%region%\%K_Region%_%K_Rayion%_%rayion%\%K_Region%_%K_Rayion%_%K_kvartal%\"
    echo Ќ®ў*п Ї*ЇЄ* д*©«*:="%K_Region%_%region%\%K_Region%_%K_Rayion%_%rayion%\%K_Region%_%K_Rayion%_%K_kvartal%\"
)
pause


отдельно проблемный кусок, работает без проблем:
Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
@echo off
set File_name=file.xml
set K_uchastok=0038
set new_file_name=Љ‚‡“_%K_uchastok%_%date:~6,4%-%date:~3,2%-%date:~0,2%.xml
echo Ќ®ў®Ґ Ё¬п д*©«*:=Љ‚‡“_%K_uchastok%_%date:~6,4%-%date:~3,2%-%date:~0,2%.xml
echo Ќ®ў®Ґ Ё¬п д*©«*:=%new_file_name%
echo %~p0%file_name%
echo %~p0%new_file_name%
ren %file_name% %new_file_name%
pause


весь набор прилагаю во вложении
Вложения
Тип файла: zip XML.zip (5.8 Кб, 6 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.04.2013, 14:01
Ответы с готовыми решениями:

Не могу справиться с if!
Вот код: #include &lt;iostream.h&gt; #include &lt;stdio.h&gt; int main() { using namespace std; ...

Не могу справиться
Я понимаю что таких много, но все же. Помогите с решением. Раз иначе вам невдомек, то говорю...

Не могу справиться

Не могу справиться с ДУ
Не могу победить ДУ Y’-(1/X+1)*Y=E^X*(X+1)

6
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
02.04.2013, 14:55 2
Если не ошибаюсь, значение %new_file_name% будет подставлено при разборе if'а во всё, что внутри. А на тот момент значение ещё не задано. Попробуй отдельно
Код
if %KPT%==0 set new_file_name
if %KPT%==0 ( всё остальное
1
0 / 0 / 0
Регистрация: 02.04.2013
Сообщений: 11
02.04.2013, 15:18  [ТС] 3
Цитата Сообщение от Somebody Посмотреть сообщение
Если не ошибаюсь, значение %new_file_name% будет подставлено при разборе if'а во всё, что внутри. А на тот момент значение ещё не задано. Попробуй отдельно
да, Вы оказались правы. Это помогло, спасибо
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
02.04.2013, 17:43 4
arey_6572, ответил Вам на том форуме. Дублирую здесь:

Новое значение, присвоенное переменной под скобками, циклом или конкатенацией команд (&), можно получить из нее, не выходя из этой же конструкции, раскрывая только через восклицательные знаки:
Код
set new_file_name=value
(
  set new_file_name=new value
  echo %new_file_name%
  echo !new_file_name!
)
Это называется режим отложенного расширения переменных среды, который необходимо предварительно включить, расположив в начале пакетного файла директиву:
Код
Setlocal EnableDelayedExpansion
либо запуская бат-файл следующим способом:
Код
cmd /v:on /c batnik.bat
P.S. Чтобы не использовать несколько кодировок (обе Win-1251 и DOS OEM-866) в пакетном файле, достаточно сохранить файл любым вменяемым редактором (например, AkelPad) в кодировке DOS.
PPS. Проблема не в 83-й строке, а в последующих.
1
0 / 0 / 0
Регистрация: 02.04.2013
Сообщений: 11
04.04.2013, 11:33  [ТС] 5
Очередная заминка:

не все *.XML файлы отформатированы с переносом строки, т.е. попадаются файлы где нет переноса на след строку после закрытия тега, например фрагмент:
Кликните здесь для просмотра всего текста
XML
1
<Location><Code_OKATO>57401380000</Code_OKATO></Location><Parcels><Parcel CadastralNumber="59:01:4410923:25" Name="01" State="01" DateCreated="2006-09-13"><Areas><Area><AreaCode>009</AreaCode>

т.е. весь файл в одну строку.
соответственно
Кликните здесь для просмотра всего текста
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
set File_name=file.xml
:: как бы имя проще получать ? так чтоб перетаскиваешь xml на
:: батник и батник в итоге получает имя xml файла
:: это что то типа:
:: set File_name=%1
set KPT=0
 
For /F "tokens=2-5 Delims=: " %%a In ('find "<Parcel CadastralNumber=" ^<"%File_name%"') Do (
    set K_Region=%%a
    set K_Rayion=%%b
    set K_kvartal=%%c
    if %%d=="" (set KPT=1) else set K_uchastok=%%d
    goto :_ext1
)
:_ext1
 
set K_Region=%K_Region:~17,2%
set K_uchastok=%K_uchastok:~0,-1%
echo %K_Region%:%K_Rayion%:%K_kvartal%:%K_uchastok%
pause


уже не может обработать файл..

Возможно ли как то через cmd реализовать замену "><" на ">перенос строки<" (>/n< в Notepad++)?
Ну или другой вариант? возможно изменить алгоритм поиска ?

второй вопрос:
как бы имя обрабатываемого файла проще получать ? так чтоб перетаскиваешь xml на
батник и батник в итоге получает имя xml файла в переменную
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
04.04.2013, 19:16 6
Цитата Сообщение от arey_6572 Посмотреть сообщение
как бы имя обрабатываемого файла проще получать ? так чтоб перетаскиваешь xml на
батник и батник в итоге получает имя xml файла в переменную
Вы эту часть закомментировали, можно чуть изменить на полный путь:
Bash
1
set File_name=%~f1
Добавлено через 1 час 29 минут
arey_6572, CMD не предназначен для разного рода работы со спецсимволами вида <> с текущем уровнем сложности поставленной задачи.

Предложенную замену нужно делать хотя бы на VBS.
А вся задача, честно выглядит как изобретение велосипеда.
Почему бы не взять для получения информации из тега XML любой доступный инструмент.
XML на то и создавался, чтобы иметь четкую структуру с простой обработкой.
1
0 / 0 / 0
Регистрация: 02.04.2013
Сообщений: 11
05.04.2013, 06:00  [ТС] 7
Цитата Сообщение от Dragokas Посмотреть сообщение
Предложенную замену нужно делать хотя бы на VBS.
А вся задача, честно выглядит как изобретение велосипеда.
Прекрасно это осознаю, но действовать приходиться исходя из имеющихся знаний и опыта.
Если cmd я хоть немного знаю, с остальными вариантами вообще никак
0
05.04.2013, 06:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2013, 06:00
Помогаю со студенческими работами здесь

Не могу справиться с заданием
1)На форме располагаются компоненты:. редактор Memo, занимающий центр окна; компо-нент ListBox c...

не могу справиться с вирусом...
здравствуйте,уважаемые... помогите... касперский пропустил видимо вирус и он теперь постоянно сидит...

Не могу справиться с задачей
Добрый день. Не могу разобраться в задаче, нужна помощь. Как это сделать? Не знаю даже с чего...

не могу справиться с заданием
Пожалуйста помогите,сильно нужна ваша помощь.Напишите полную программу))


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru