[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]BAT如何提取文本内容并有序排列(2)

有很多文本,内容相似,例:
123456.txt部分内容如下:
、、
[Surface]
Type=torus
Thickness=5.000
BaseRadius=95.29

[InitialData]
Type=torus
Thickness=15.200
BaseRadius=100.5
、、
如何将所有文本中[InitialData]下各项内容展开,导入b.csv
效果如下:
文件名        Type        Thickness        BaseRadius
123456        torus        15.2        100.5

实际情况可能有些不同,为便于测试,上传附件,内有例子:
希望用2个代码实现2种效果。

可参考:
http://www.bathome.net/thread-34493-1-1.html
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 1# syqh2010
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. >"汇总.csv" echo,文件名,Type,Thickness,BaseRadius
  4. for %%a in (*.txt) do (
  5. echo %%a
  6. >>$1 findstr /n .* "%%a"
  7. for /f "tokens=1* delims=:" %%b in ('findstr /n "InitialData" "$1"') do set n=%%b
  8. set m=1
  9. for /f "tokens=1* delims=:" %%c in ('type "$1"') do (
  10. if !m! geq !n! (
  11. >>$2 echo,%%d
  12. if "%%d" == "" call :aa "%%a"
  13. )
  14. set /a m+=1
  15. )
  16. del $*
  17. )
  18. pause & exit
  19. :aa
  20. >>$3 findstr "Type" "$2" || >>$3 echo Type=
  21. echo.>>$3
  22. >>$3 findstr "Thickness" "$2" || >>$3 echo Thickness=
  23. echo.>>$3
  24. >>$3 findstr "BaseRadius" "$2" || >>$3 echo BaseRadius=
  25. for /f "delims=" %%i in ($3) do >>$$ echo,%%i,
  26. move $$ $3 >nul
  27. set s=
  28. for /f "tokens=1* delims==" %%i in ('findstr "Type Thickness BaseRadius" "$3"') do set "s=!s!%%j"
  29. >>"汇总.csv" echo,%~n1,!s!
  30. goto :eof
复制代码
1

评分人数

TOP

回复 2# pcl_test

谢谢你的帮助,代码可以用,但有些小问题。

BaseRadius=100.5
1)这一段后面有2个换行(或1个换行+不换行的文本),得出的结果是对的。
2)若后面无换行、或只有一个换行,结果是空白的。
3)若后面换行大于2个,得出的结果是:
文件名        Type        Thickness        BaseRadius                       
123        torus        15.2        124.8                       
123        torus                15.2                124.8       
123        torus                        15.2               
会随着换行的增多递增

TOP

本帖最后由 apang 于 2015-3-3 23:48 编辑

这样试试:
  1. @echo off
  2. set "re=\[FineCuttingHsc101\]"
  3. set "fPath=D:\Test\"
  4. set "str=CuttingSpeed,LensSpeed,LensSpeedMaster,LensSpeedSphere,CuttingDepth,SpiralDistance,DotDistance"
  5. pushd "%fPath%"
  6. echo,Name,Side,%str%>"%~dp01.csv"
  7. (for /f "tokens=1,2delims=:" %%i in ('findstr /in "%re%" *.R *.L') do (
  8.         setlocal enabledelayedexpansion
  9.         set "s=%%~xi"
  10.         for /f "tokens=*" %%a in ('more +%%j "%%i"') do (
  11.                 set "s1=%%a"
  12.                 if "!s1:~,1!" == "[" set flag=1
  13.                 if not defined flag set "%%a"
  14.         )
  15.         for %%a in (%str%) do set "s=!s!,!%%a!"
  16.         echo,%%~ni,!s:~1!
  17.         endlocal
  18. ))>>"%~dp01.csv"
  19. pause
复制代码
1

评分人数

TOP

回复 4# apang
谢谢!要的就是这效果,如果能指定需处理的路径名就更好了!

TOP

回复 5# syqh2010


    已修改。在批处理路径下生成1.csv

TOP

回复 6# apang
非常感谢!!!

TOP

返回列表