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

时间:2016-03-16 00:55:48

标签: parsing csv batch-file findstr

我有一堆原始数据真的只有我关心的四个值:DX,DY,Width和Height以及相应的偏移名称。

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

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'?批次是否可以实现这一点?

1 个答案:

答案 0 :(得分:1)

@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
相关问题