标题: [文本处理] [已解决]批处理BAT如何根据a文本中的字段在b文本中查询,符合条件的输出c文本? [打印本页]
作者: maillard 时间: 2014-3-28 17:42 标题: [已解决]批处理BAT如何根据a文本中的字段在b文本中查询,符合条件的输出c文本?
本帖最后由 maillard 于 2014-3-29 09:33 编辑
1、文本a.txt里面有序号和单词
01、bathtub
02、ornament
03、chimney
04、respiratory
05、shoplift
..................
2、词典b.txt里面有对应的单词和中文释义
abandon vt.放弃,遗弃;n.放任,狂热
abandoned adj.被抛弃的,自甘堕落的,没有约束的,放荡的
abandonee n.被遗弃者,被委付者
abandoner n.遗弃者,委付者
abandonment n.放弃
......
3、如何实现将a.txt中的单词在b.txt中查询中文释义,并按原序号顺序生成如下c.txt:
01、bathtub n.浴缸,澡盆
02、ornament n.装饰物,教堂用品vt.装饰,修饰
03、chimney n.烟囱,灯罩
04、respiratory adj.呼吸的
作者: 522235677 时间: 2014-3-28 18:00
- @echo off & setlocal enabledelayedexpansion
- for /f "tokens=2 delims=、" %%a in (a.txt) do (
- for /f "delims=" %%i in ('findstr /c:"%%a#" b.txt') do set /a n+=1&echo !n!、%%i
- )
- pause
复制代码
你那个b.txt 单词和词意之间是空格还是tab符号?
如果是空格的话你就把代码中#替换为空格
如果是tab则替换tab
作者: maillard 时间: 2014-3-28 20:23
回复 2# 522235677
非常感谢522235677,代码可以运行,但是有两个问题
1、原文本a.txt里面有序号中的序号不完全是按个位数顺序排列的
01、bathtub
02、ornament
03、chimney
04、respiratory
05、shoplift
06、xxxx
06.1、xxxxx -------有些地方有小数点
06.2、xxxxx
09、xxxxx -------有些地方会漏一两个编号
希望输出的结果是完全按原a.txt的编号
2、查询结果是模糊匹配,比如查询sexual,出来下面很多结果,希望输出是精确匹配的结果。
asexual adj.无性的,无性生殖的
bisexual adj.两性的,雌雄同体的,[生物]=性体,[精神病]在性欲上受两性吸引的人
heterosexual adj.异性的,异性爱的n.异性恋的人
homosexual adj.同性恋的n.同性恋
intersexual adj.两性间的
.......
作者: 522235677 时间: 2014-3-28 20:49
回复 3# maillard - @echo off & setlocal enabledelayedexpansion
- for /f "tokens=1,2 delims=、" %%a in (a.txt) do (
- for /f "delims=" %%c in ('findstr /c:"%%b " b.txt') do echo %%a、%%c
- )
- pause
复制代码
让你替换那个#就是为了全字匹配。我自己测试都没有问题的
作者: maillard 时间: 2014-3-28 21:01
本帖最后由 maillard 于 2014-3-28 21:17 编辑
回复 4# 522235677
#号已经替换了为tab了
出来很多模糊查询的结果
02.4、amorous adj.多情的,恋爱的,表示爱情的
02.4、clamorous adj.大喊大叫的
02.4、glamorous adj.富有魅力的,迷人的
02.4、unglamorous adj.没有魅力的,无浪漫色彩的,乏味的,单调的
.......
04、coral n.珊瑚,珊瑚虫
04、corporal n.<美>下士adj.肉体的,身体的
04、discifloral adj.[植](有)盘状花的
04、doctoral adj.博士的
04、electoral adj.选举人的,选举的
.........
作者: 522235677 时间: 2014-3-28 21:15
回复 5# maillard
我空格 & tab 都测试ok。
作者: 522235677 时间: 2014-3-28 21:16
加群 群名称是批处理之家① 43011867
作者: 522235677 时间: 2014-3-28 22:04
findstr "^%%b " b.txt
findstr对tab符号不起作用,坐等高手
作者: apang 时间: 2014-3-28 22:28
回复 8# 522235677
findstr /i "\<%%b\>" b.txt
\< 和 \>相当于vbs中的\b,匹配字符(单词)边界
作者: apang 时间: 2014-3-28 22:55
本帖最后由 apang 于 2014-3-28 23:27 编辑
- Set fso = CreateObject("Scripting.FileSystemObject")
- txt = fso.OpenTextFile("b.txt").ReadAll
- Set f = fso.OpenTextFile("a.txt")
- while Not f.AtEndOfStream
- strline = Trim(f.ReadLine)
- If InStr(strLine, "、") Then
- ar = Split(strLine, "、")
- s = s & ar(0) & "、" & RegEx(ar(1)) & vbCrLf
- End If
- wend
-
- fso.OpenTextFile("c.txt", 2, true).Write s
-
- Function RegEx(str)
- Set re = New RegExp
- re.Pattern = "\b" & str & "\b[^\r]*"
- re.IgnoreCase = true
- If re.Test(txt) Then
- RegEx = re.Execute(txt)(0)
- Else RegEx = str
- End If
- End Function
复制代码
作者: maillard 时间: 2014-3-29 09:32
@echo off & setlocal enabledelayedexpansion
for /f "tokens=1,2 delims=、" %%a in (a.txt) do (
for /f "delims=" %%c in ('findstr /B "\<%%b\>" b.txt') do echo %%a、%%c
)>>c.txt
pause
用4楼的代码修改一下测试成功了,10楼的代码暂时还没能看懂,继续学习~~,谢谢各位!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |