标题: [文本处理] DOS BAT怎么比较两个字符串根据数量的多少判定是否打印到新的txt中? [打印本页]
作者: dm990436 时间: 2022-4-25 16:29 标题: DOS BAT怎么比较两个字符串根据数量的多少判定是否打印到新的txt中?
本帖最后由 dm990436 于 2022-4-27 14:39 编辑
有2个txt文件,
1.txt中有
a b c d e
b f g s z
b g u l m
...
2.txt中有
a c d g l
a k r m v
c e q l n
...
需求:
预先设定重复个数2或者3个的打印出来。
1.txt中的每一行要跟2.txt中的每一行做比较,取最大的相同数量,譬如1.txt中的a b c d e逐行跟2.txt的每一行比较,只要有一个满足条件就打印出来:
a c d g l 重复3个,满足条件
a k r m v 重复1个,不满足
c e q l n 重复c e,2个,满足条件。则打印出1.txt中a b c d e该行
如b f g s z 循环2.txt的每一行,
a c d g l 重复1个,不满足条件
a k r m v 重复0个,不满足
c e q l n 重复0个,不满足。
b f g s z 不满足2-3个重复个数,则不打印1.txt中b f g s z该行
求大神指点如何写。。。。
作者: Batcher 时间: 2022-4-25 17:32
回复 1# dm990436
a b c d e
a b c m v 重复1个?规律是啥呢,每太看懂。
作者: cutebe 时间: 2022-4-25 21:12
- @echo off
- SetLocal EnableDelayedExpansion
- for /f "delims=" %%1 in (1.txt)do (
- call :cmp "%%1"
- )
- pause
- goto :eof
-
- :cmp str1 mstr
- SetLocal
- for %%a in (%~1)do (
- set _%%a=1
- )
- for /f "delims=" %%2 in (2.txt)do (
- set lflag=0
- for %%b in (%%2)do (
- if defined _%%b set/alflag+=1
- )
- if !lflag! equ 2 echo/%~1&&goto :endc
- if !lflag! equ 3 echo/%~1&&goto :endc
- )
- :endc
- EndLocal
复制代码
作者: dm990436 时间: 2022-4-26 16:55
本帖最后由 dm990436 于 2022-4-26 16:57 编辑
回复 2# Batcher
不好意思,写错了,是a k r m v 大概的意思就是比较有几个相同的,然后跟条件相比较,满足的话打印。
作者: Batcher 时间: 2022-4-26 17:00
回复 4# dm990436
请编辑一下顶楼的需求吧
作者: dm990436 时间: 2022-4-27 14:40
回复 5# Batcher
已修改
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |