标题: [文本处理] 批处理怎样实现两个文件的字符匹配? [打印本页]
作者: 帝尊 时间: 2023-8-15 11:59 标题: 批处理怎样实现两个文件的字符匹配?
txt文件内可能是XX1匹配,也可能是XX2匹配,也可能都匹配,但是也可能匹配多行。
下面的数据是ini文件的数据。
XX1=XX2=XX3=XX4
XX1=XX2=XX3=XX5
XX1=XX2=XX3=XX6
XX1=XX2=XX3=XX7
AA1=AA2=AA3=AA4
BB1=BB2=BB3=BB4
匹配两个文件相同的字符。
先判定ini文件内的字符与txt文件内的字符有几个相同的。
先判定XX1有几个符合的,有多个符合的就去判定XX2有几个符合的,如果还是有多个符合的那么就给出显示XX3,最好是能有选择。
如果无法给出选择,那么就给个提示提示就是XX3,然后让我自己输入,输入后进行匹配第四个,赋值给变量。
作者: Batcher 时间: 2023-8-15 12:03
回复 1# 帝尊
请把txt和ini打包上传到网盘,以便测试代码。
作者: 帝尊 时间: 2023-8-15 18:57
回复 2# Batcher
https://www.123pan.com/s/AYXqVv-7L4t.html
谢谢大佬。
作者: pd1 时间: 2023-8-15 19:45
回复 3# 帝尊
不这个例子最后想得到什么结果呢?我是真没怎么听明白你的描述
作者: czjt1234 时间: 2023-8-15 20:12
没看懂
作者: Batcher 时间: 2023-8-15 21:48
回复 3# 帝尊
我使用PZ.txt里面的字符串手工去PZ.ini里面搜索,没有匹配的。
作者: 帝尊 时间: 2023-8-15 22:18
回复 5# czjt1234
回复 4# pd1
就是txt文件内有一些数据是在ini文件内可以匹配的,比如txt内有8BTK这个字符串,然后与ini文件进行匹配,匹配成功以后把匹配的那一行=最后的字符串赋值给一个变量。
例如:INI文件内容是这个。
X48=2ABP=MNOP=QRSTUVWXYZ.ABCDEFGH 123 XYZWVUTS
txt文件内容有一行是
X48或者是2ABP。
匹配成功后把QRSTUVWXYZ.ABCDEFGH 123 XYZWVUTS赋值给一个变量
再比如:
F84=6IJK=QRST=VWXYZABCD.VWXYZAB 789 QWERTYUI
F84=8KYP=QRST=VWXYZABCD.VWXYZAB 567 QWERTYUI
F84匹配了两次,但是F84后面有不同的,那么就看txt文件内有哪个可以与6IJK或者8KYP匹配,成功后把对应的最后一组字符赋值给变量
再比如:
例如:INI文件内容是这个。
W70=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 899 HIGEHKHL
W70=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 890 HIGEHKHL
W70=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 456 HIGEHKHL
W70=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 789 HIGEHKHL
W70=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 234 HIGEHKHL
只有最后的是不一样的,前面都一样,那么就提示有哪些是一样的。分别是什么。
作者: 帝尊 时间: 2023-8-15 22:19
回复 6# Batcher
有的,- Date
- 78.huhk
- Version
- F84
- VID
- 6IJK
- BIK
- 12345678
复制代码
- F84=6IJK=QRST=VWXYZABCD.VWXYZAB 789 QWERTYUI
- F84=6IJK=QRST=VWXYZABCD.VWXYZAB 567 QWERTYUI
- F84=6IJK=QRST=VWXYZABCD.VWXYZAB 274 QWERTYUI
- F84=6IJK=QRST=VWXYZABCD.VWXYZAB 8735 QWERTYUI
- F84=6IJK=QRST=VWXYZABCD.VWXYZAB 2576 QWERTYUI
复制代码
F84相同 6IJK也相同。
作者: hfxiang 时间: 2023-8-16 09:40
回复 3# 帝尊
用gawk( http://bcn.bathome.net/tool/5.1.0/gawk.exe )实现如下:- awk "NR==FNR{if(NF){for(i=1;i<=NF;i++)a[++N]=$i}next}{for(i=1;i<=N;i++)if($0~a[i]){print;next}}" pz.txt pz.ini
复制代码
作者: 帝尊 时间: 2023-8-16 10:00
回复 9# hfxiang
谢谢,可以不适用第三方吗?批处理里面有powershell命令也可以的。
作者: qixiaobin0715 时间: 2023-8-16 10:33
本帖最后由 qixiaobin0715 于 2023-8-16 10:35 编辑
逻辑上还是未表达清楚,比如下面一组内容。txt文件中包含W70、X48、7UHK、9UHK。
1.第1-3行含有W70,而第3行中9UHK与第1、2行中7UHK不同;
2.第4行中7UHK与第1、2行中又相同。
以上情况该如何处理。
这里只是举一个例子而已。- W70=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 899 HIGEHKHL
- W70=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 890 HIGEHKHL
- W70=9UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 456 HIGEHKHL
- X48=7UHK=KALI=HIKHIGELHI.HIHGEI HISHEIGE 789 HIGEHKHL
复制代码
作者: aloha20200628 时间: 2023-8-16 12:28
给一个纯P方案》先对pz.txt逐行首尾去空格,再用findstr字面量匹配,最后去重...- @echo off
- for /f "tokens=*" %%s in (pz.txt) do (
- for /f "tokens=4 delims==" %%t in ('findstr /lc:"%%~nxs" pz.ini') do if "%%~t" neq "" if not defined #%%~t (set #%%~t=1 & echo,%%t)
- )
- pause &exit/b
复制代码
作者: 帝尊 时间: 2023-8-16 23:25
回复 11# qixiaobin0715
如果是这样的话,也给出提示好了。让我选择用哪一个。
作者: 帝尊 时间: 2023-8-16 23:27
回复 12# aloha20200628
感谢大佬,明天去试试。
作者: qixiaobin0715 时间: 2023-8-17 09:09
回复 13# 帝尊
看样子你还是没理解我的意思,我只是举个例子而已,主要是说你逻辑上没表达清楚。
顶楼和7楼似乎有矛盾的地方,也可能是我理解能力有限,再举个例子吧(只是举例,这不是重点)。
你在顶楼是这样说的:“先判定XX1有几个符合的,有多个符合的就去判定XX2有几个符合的”。
这里的符合是何意?是说在txt文件中既含有XX1又含有XX2?那么txt中含有xx1而不含xx2如何处理?
所以我的主要意思是,你自己要先把逻辑理清楚。
作者: 帝尊 时间: 2023-8-17 17:51
回复 15# qixiaobin0715
都有的。不存在没有的情况。
作者: qixiaobin0715 时间: 2023-8-18 08:23
回复 16# 帝尊
引用顶楼的“有多个符合的就去判定XX2有几个符合的。”
好奇怪。既然都有就不需要再去判断是否符合的了。
作者: 帝尊 时间: 2023-8-19 11:44
回复 17# qixiaobin0715
因为有多个符合的,但是XX4的数据不同啊。
作者: qixiaobin0715 时间: 2023-8-20 08:12
本帖最后由 qixiaobin0715 于 2023-8-20 08:30 编辑
可能我理解能力有限,到现在还云里雾里的,还是留待大佬们来解决吧。
作者: 帝尊 时间: 2023-8-22 18:18
回复 19# qixiaobin0715
12楼的大佬给了代码了。自己完善了下,很好用。
作者: qixiaobin0715 时间: 2023-8-23 09:14
在本论坛混,重要的是要有分享精神和感恩之心。不要光顾自己高兴,难道不想给12楼的点个赞,把自己完善后的代码分享出来吗。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |