标题: [文本处理] [已解决]批处理如何提取指定内容所属的文本区域(范围)? [打印本页]
作者: enoone1 时间: 2016-3-20 10:16 标题: [已解决]批处理如何提取指定内容所属的文本区域(范围)?
BAT如何获取指定行所在的文本区域
比如test.txt文本内容
安卓手机低配一:
{
oppo:电池2000毫安
oppo:充电一分钟通话一小时
oppo:内存16G
……
}
功能机配置:不做配置描述
诺基亚:1050
安卓手机标配一:
{
华为:电池3000毫安
华为:1600万像素
华为:6英寸
……
}
安卓手机低配二:
{
类似上面格式
……
}
安卓手机高配二:
{
类似上面格式,每个配置项都是唯一的
……
}
……文本里还有很多低配置/高配置/标配置,类似上面配置格式
如何获取某一配置行,如“华为:1600万像素 ”所在的配置区域??即经BAT过滤后,得到如下结果:
安卓手机标配一:
{
华为:电池3000毫安
华为:1600万像素
华为:6英寸
……
}
作者: bailong360 时间: 2016-3-20 11:00
本帖最后由 bailong360 于 2016-3-20 20:48 编辑
- //&@cls&more test.txt|cscript -nologo -e:jscript "%~f0"&pause
- WSH.Echo(WSH.StdIn.ReadAll().match(/{[^{}]+?华为:1600万像素[^{}]+?}/g))
复制代码
=====2016-3-20 17:35==============
你们都来纯批处理,那我也来一个.应该是最短了- @echo off
- setlocal enabledelayedexpansion
- set keyword=华为:1600万像素
- set LF=^
-
-
- for /f "delims=" %%i in ('findstr /rc:"^[ {}]" test.txt') do (
- set "str=!str!!LF!%%i"
- if "%%i"=="}" (
- if "!str:%keyword%=!" neq "!str!" echo {!str:*{=!
- set str=
- )
- )
- pause
复制代码
作者: pcl_test 时间: 2016-3-20 14:54
本帖最后由 pcl_test 于 2016-3-20 18:23 编辑
- mshta http://bathome.net/s/hta/ "type('test.txt').match(/[^\r\n]+:\r?\n\{[^\}]+?华为:1600万像素[^\}]+?\}/g)"
复制代码
作者: happy886rr 时间: 2016-3-20 15:36
本帖最后由 happy886rr 于 2016-3-20 23:24 编辑
回复 1# enoone1
gk开关- @echo off&setlocal enabledelayedexpansion
- set /p str=请输关键词: &echo,
- for /f "tokens=1* delims=:" %%A in ('type test.txt^|findstr /n /i /c:"!str!"') do (
- set gk=1
- for /f "tokens=1* delims=:" %%a in ('type test.txt^|findstr /n "{"') do (
- if !gk! equ 1 (
- if %%a gtr %%A (
- set gk=0
- ) else (
- set /a mark=%%a-1
- )
- )
- )
- if not defined #!mark! (
- set "#!mark!=1" &set gk=0
- for /f "tokens=1* delims=:" %%a in ('type test.txt^|findstr /n .*') do (
- if %%a equ !mark! (set gk=1)
- if !gk! equ 1 (echo,%%b &set "dis=%%b"
- if "!dis: =!"=="}" (
- set gk=0
- )
- )
- )
- )
- )
- pause>nul
复制代码
标记算法- ...
- for /f "tokens=1* delims=:" %%a in ('type test.txt^|findstr /n /i /c:"!str!"') do (set #%%a=1)
- for /f "tokens=1* delims=:" %%a in ('type test.txt^|findstr /n .*') do (
- if "%%b"=="{" (set /a N=%%a-1)
- if defined #%%a (set "#%%a=" &set "#!N!=1")
- for /f "tokens=1* delims=:" %%a in ('type test.txt^|findstr /n .*') do (
- if defined #%%a (set gk=1)
- ...
复制代码
作者: WHY 时间: 2016-3-20 16:35
本帖最后由 WHY 于 2016-3-20 17:49 编辑
临时文件方案- @echo off & setlocal enabledelayedexpansion
- set "keyWord=华为:1600万像素"
- set n=0
-
- for /f "delims=" %%i in (test.txt) do (
- if "%%i" == "}" (
- (echo;!s!&echo;%%i)>>!n!.$
- set /a n+=1
- set "flag="
- )else if "%%i" == "{" set flag=1
- if defined flag echo;!s!>>!n!.$
- set "s=%%i"
- if not "!s:%keyWord%=!" == "!s!" set _!n!=1
- )
-
- for /f "delims=_=" %%i in ('set _') do move %%i.$ %%i.txt
- del *.$
- pause
复制代码
作者: enoone1 时间: 2016-3-20 20:26
回复 2# bailong360
set "str=!str!!CR!%%i"这个字符串拼接用的绝,第一次看到这种用法,学到了,多谢。
作者: pcl_test 时间: 2016-3-20 20:44
回复 2# bailong360
应该是LF
作者: bailong360 时间: 2016-3-20 20:48
回复 7# pcl_test
受教了
作者: enoone1 时间: 2016-3-20 21:06
回复 3# pcl_test
版主 我最近发帖老被PB -4,我感觉我按版规了啊,标题清楚,不是重复帖,为什么啊
作者: pcl_test 时间: 2016-3-20 21:12
回复 9# enoone1
直接发样本网盘分享链接,比你举长而不详的样例好很多
作者: enoone1 时间: 2016-3-20 21:18
回复 10# pcl_test
好吧,以后注意
作者: enoone1 时间: 2016-3-20 23:10
回复 5# WHY
变量用的很巧妙,膜拜下。
作者: CrLf 时间: 2016-3-21 02:14
- context -e -f "/^\S+:/" -t /\}/ '1600万像素' test.txt
复制代码
下载:http://www.bathome.net/s/tool/?key=context
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |