找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27731|回复: 6

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

[复制链接]
发表于 2015-3-2 23:43:21 | 显示全部楼层 |阅读模式
有很多文本,内容相似,例:
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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2015-3-3 02:05:31 | 显示全部楼层
回复 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技术 +1 收起 理由
syqh2010 + 1 乐于助人

查看全部评分

 楼主| 发表于 2015-3-3 06:47:05 | 显示全部楼层
回复 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               
会随着换行的增多递增
发表于 2015-3-3 14:09:12 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
syqh2010 + 1 乐于助人

查看全部评分

 楼主| 发表于 2015-3-3 21:50:06 | 显示全部楼层
回复 4# apang
谢谢!要的就是这效果,如果能指定需处理的路径名就更好了!
发表于 2015-3-3 23:54:11 | 显示全部楼层
回复 5# syqh2010


    已修改。在批处理路径下生成1.csv
 楼主| 发表于 2015-3-4 00:19:18 | 显示全部楼层
回复 6# apang
非常感谢!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 13:31 , Processed in 0.021275 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表