标题: [文本处理] [已解决]BAT如何提取文本内容并有序排列(2) [打印本页]
作者: syqh2010 时间: 2015-3-2 23:43 标题: [已解决]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
作者: pcl_test 时间: 2015-3-3 02:05
回复 1# syqh2010 - @echo off
- setlocal enabledelayedexpansion
- >"汇总.csv" echo,文件名,Type,Thickness,BaseRadius
- for %%a in (*.txt) do (
- echo %%a
- >>$1 findstr /n .* "%%a"
- for /f "tokens=1* delims=:" %%b in ('findstr /n "InitialData" "$1"') do set n=%%b
- set m=1
- for /f "tokens=1* delims=:" %%c in ('type "$1"') do (
- if !m! geq !n! (
- >>$2 echo,%%d
- if "%%d" == "" call :aa "%%a"
- )
- set /a m+=1
- )
- del $*
- )
- pause & exit
- :aa
- >>$3 findstr "Type" "$2" || >>$3 echo Type=
- echo.>>$3
- >>$3 findstr "Thickness" "$2" || >>$3 echo Thickness=
- echo.>>$3
- >>$3 findstr "BaseRadius" "$2" || >>$3 echo BaseRadius=
- for /f "delims=" %%i in ($3) do >>$$ echo,%%i,
- move $$ $3 >nul
- set s=
- for /f "tokens=1* delims==" %%i in ('findstr "Type Thickness BaseRadius" "$3"') do set "s=!s!%%j"
- >>"汇总.csv" echo,%~n1,!s!
- goto :eof
复制代码
作者: syqh2010 时间: 2015-3-3 06:47
回复 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
会随着换行的增多递增
作者: apang 时间: 2015-3-3 14:09
本帖最后由 apang 于 2015-3-3 23:48 编辑
这样试试:- @echo off
- set "re=\[FineCuttingHsc101\]"
- set "fPath=D:\Test\"
- set "str=CuttingSpeed,LensSpeed,LensSpeedMaster,LensSpeedSphere,CuttingDepth,SpiralDistance,DotDistance"
-
- pushd "%fPath%"
- echo,Name,Side,%str%>"%~dp01.csv"
- (for /f "tokens=1,2delims=:" %%i in ('findstr /in "%re%" *.R *.L') do (
- setlocal enabledelayedexpansion
- set "s=%%~xi"
- for /f "tokens=*" %%a in ('more +%%j "%%i"') do (
- set "s1=%%a"
- if "!s1:~,1!" == "[" set flag=1
- if not defined flag set "%%a"
- )
- for %%a in (%str%) do set "s=!s!,!%%a!"
- echo,%%~ni,!s:~1!
- endlocal
- ))>>"%~dp01.csv"
- pause
复制代码
作者: syqh2010 时间: 2015-3-3 21:50
回复 4# apang
谢谢!要的就是这效果,如果能指定需处理的路径名就更好了!
作者: apang 时间: 2015-3-3 23:54
回复 5# syqh2010
已修改。在批处理路径下生成1.csv
作者: syqh2010 时间: 2015-3-4 00:19
回复 6# apang
非常感谢!!!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |