в процессе создания инструмента для преобразования xml-файла в карту cpp, я пишу этот пакетный файл ниже. XML-файлы в основном содержат {ключ, значение}, и инструмент состоит в том, чтобы преобразовать эти {ключ, значение} в карту в cpp, но это не работает, пожалуйста, обратитесь к моему фактическому выводу и ожидаемому выводу, пожалуйста, помогите мне для неправильных кодов
@ECHO off
title Convert_Tool_v1.0
setlocal enableDelayedExpansion
::create output folder
@RD /S /Q "output"
md "output"
::build "array" of folders to access each of them
set folderCnt=0
for /f "eol=: delims=" %%F in ('dir /b /ad *') do (
set /a folderCnt+=1
set "folder!folderCnt!=%%F"
)
::make cpp file for each values_XXX/strings.xml
for /l %%N in (1 1 %folderCnt%) do (
::echo %%N - !folder%%N!
call :MAKE_CPP_FILE !folder%%N!
)
del ".\output\output.cpp" /s /f /q
echo convert finished
::function to make cpp files
EXIT /B %ERRORLEVEL%
:MAKE_CPP_FILE
::echo current folder is: %~1
::create file
echo.>".\output\%~1.cpp"
::check each line of xml file, convert line and write to output files
@echo off
set "replace_from_1= \<\/string\>="
set "replace_to_1=\"},"
set "replace_from_2= \<string name\="
set "replace_to_2={"
set "replace_from_3= \"\>"
set "replace_to_3=\",\""
set "source=%~1\\strings.xml"
set "target=.\output\%~1.cpp"
setlocal enableDelayedExpansion
(
for /F "tokens=1* delims=:" %%a in ('findstr /N "^" %source%') do (
set "line=%%b"
if defined line set "line=!line:%replace_from_1%=%replace_to_1%!"
::if line doesnt contain key, then don't convert this line
if errorlevel 1 (
set "line="
)
::continue convert key,value
if defined line set "line=!line:%replace_from_2%=%replace_to_2%!"
if defined line set "line=!line:%replace_from_3%=%replace_to_2%!"
echo(!line!
)
) > %target%
endlocal
EXIT /B 0
содержимое XML-файла выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Version : BDG14625.003.09.15-->
<!--C1 Strings-->
<!-- Start 20180409: Added font names as strings to handle font issues, as a suggested solution -->
<string name="font_name_Regular">GMSansUI_Regular</string>
<string name="font_name_Medium">GMSansUI_Medium</string>
<string name="font_name_Light">GMSansUI_Light</string>
<!-- End 20180409: Added font names as strings to handle font issues, as a suggested solution -->
<string name="audio_accessory_audio_short_ipc">Accessory Audio</string>
<string name="audio_action_unavailable_short_ipc">Action unavailable.</string>
<string name="audio_action_unavailable_while_indexing_short_ipc">Action unavailable while indexing.</string>
...
ожидаемая выходная карта cpp вероятно:
{"font_name_Regular","GMSansUI_Regular"},
{"font_name_Medium","GMSansUI_Medium"},
{"font_name_Light","GMSansUI_Light"},
{"audio_accessory_audio_short_ipc","Accessory Audio"},
{"audio_action_unavailable_short_ipc","Action unavailable."},
...
фактический вывод:
line:={
line:={
line:={
line:={
line:={
line:={
line:={
line:={
line:={
line:={
line:={
line:={
Большое спасибо !!