批处理程序如何解析文本数据文件的值,然后保存到 csv 类型文件中?

How can a batch program parse a text data file for values and then save into a csv type file?

我有一堆原始数据,实际上只有四个我关心的值:DX、DY、宽度和高度以及相应的偏移名称。

包含此原始数据的文本文件如下所示:

0:walk: Length=5 Offset=#b0 U1=#1058000 U2=#ff U3=#0 U4=#0
  0: Offset=#218 Size=#6 U1=#0
    0: Type=0 Offset=#ed8 Size=#3f8 Width=39 Height=54 HSType=#2 HS=#23030
      HotSpot: X=2 Y=-34 DX=4 DY=-22 U1=0 U2=7 U3=0 U4=0
    1: Type=0 Offset=#12d0 Size=#3e8 Width=39 Height=53 HSType=#2 HS=#23040
      HotSpot: X=1 Y=-35 DX=1 DY=-24 U1=0 U2=7 U3=0 U4=0
    2: Type=0 Offset=#16b8 Size=#3e5 Width=38 Height=53 HSType=#2 HS=#23050
      HotSpot: X=0 Y=-35 DX=-1 DY=-24 U1=0 U2=7 U3=0 U4=0
    3: Type=0 Offset=#1aa0 Size=#3fe Width=38 Height=54 HSType=#2 HS=#23060
      HotSpot: X=0 Y=-34 DX=-3 DY=-22 U1=0 U2=7 U3=0 U4=0

...

我的 csv 类型文件需要如下所示:

00-步行-00-000,4,-22,39,54,4

00-步行-00-001,1,-24,39,53,4 ...

换句话说: %a,%b,%c,%d,4 其中 %a 是名称,%b 是 DX 值,%c 是 DY 值,%d 是宽度,%e 是高度。

我知道制作 %a 有点困难,可能超出了我试图做的事情的范围。我很高兴只将 %b、%c、%d 值提取到每组的单独行中。这是丑陋的数据,很难看到,但名称或 %a 来自三个来源。 00 来自第一个字符单个 0。 %a 的下一部分是 0 之后的文本 'walk',最后一部分来自从 0 开始的每个后续帧编号。随机 "offset=" 空白不是偏移名称,就像我说的很高兴将四个变量 %b-%e 解析为一个 csv 文件。

如何使用 findstring 查找通配符值? 例如,当我不知道某个数字是什么时,如何在字符串 DX=some number 中找到子字符串 'some number'?批处理是否可行?

@echo off
setlocal EnableDelayedExpansion

set "spaces=    " & set "i=0"
for /F "delims=" %%A in (input.txt) do for /F "tokens=1*" %%a in ("%%A") do for %%i in (!i!) do (
   set "line=%%b" & for %%c in ("!line: =" "!") do set %%c & set "line=%%A"
   if %%i lss 6 (
      if "!line:~0,%%i!" equ "!spaces:~0,%%i!" (
         set "Ofs[%%i]=00%%a" & set "Ofs[%%i]=!Ofs[%%i]::=-!"
      ) else (
         set /A i-=2
         for %%i in (!i!) do if "!line:~0,%%i!" equ "!spaces:~0,%%i!" (
            set "Ofs[%%i]=00%%a" & set "Ofs[%%i]=!Ofs[%%i]::=-!"
         ) else (
            set /A i-=2
            for %%i in (!i!) do set "Ofs[%%i]=00%%a" & set "Ofs[%%i]=!Ofs[%%i]::=-!"
         )
      )
      set /A i+=2
   ) else (
      echo !Ofs[0]:~1!!Ofs[2]:~1!!Ofs[4]:~0,-1!,!DX!,!DY!,!Width!,!Height!,4
      set /A i-=2
   )
)

输出:

00-walk-00-000,4,-22,39,54,4
00-walk-00-001,1,-24,39,53,4
00-walk-00-002,-1,-24,38,53,4
00-walk-00-003,-3,-22,38,54,4
00-walk-00-004,-2,-23,39,54,4
00-walk-00-005,0,-24,39,54,4
00-walk-01-000,8,-22,37,57,4
00-walk-01-001,9,-24,37,57,4
00-walk-01-002,8,-25,38,55,4
00-walk-01-003,7,-24,38,55,4
00-walk-01-004,8,-25,38,55,4
00-walk-01-005,9,-24,37,57,4
00-walk-02-000,3,-20,29,61,4
00-walk-02-001,6,-21,29,61,4
00-walk-02-002,9,-21,31,60,4
00-walk-02-003,8,-22,38,59,4
00-walk-02-004,7,-21,35,60,4
00-walk-02-005,7,-21,27,61,4
00-walk-03-000,3,-18,38,60,4
00-walk-03-001,4,-18,33,62,4
00-walk-03-002,6,-19,28,61,4
00-walk-03-003,4,-18,28,60,4
00-walk-03-004,5,-19,29,61,4
00-walk-03-005,4,-18,33,62,4
00-walk-04-000,-5,-19,40,54,4
00-walk-04-001,-3,-19,39,57,4
00-walk-04-002,0,-18,40,58,4
00-walk-04-003,2,-17,38,58,4
00-walk-04-004,0,-18,40,58,4
00-walk-04-005,-3,-19,39,57,4
01-faces-00-000,-1,-24,38,54,4
01-faces-01-000,9,-24,38,56,4
01-faces-02-000,8,-21,29,60,4
01-faces-03-000,5,-18,31,62,4
01-faces-04-000,-1,-19,40,57,4
02-offense_move-00-000,7,-25,36,56,4
02-offense_move-00-001,6,-21,29,54,4
02-offense_move-00-002,5,-17,27,61,4
02-offense_move-00-003,-1,-32,25,77,4
02-offense_move-00-004,0,-23,25,51,4
02-offense_move-01-000,12,-24,40,57,4