中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何从QQ2009的Info.db中将号码提取出来(已解决)
« [1] [2] [3] »
作者:
标题: [求助]如何从QQ2009的Info.db中将号码提取出来(已解决) 上一主题 | 下一主题
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 16 楼』:  

我就懒得装2009了

你是怎么替换的




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-3-3 15:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 17 楼』:  

上传的QQ2009信息info.db文件 http://upload.cn-dos.net/img/1348.rar

例如有如下的乱码:

  Quote:
涳艛?忌:J垟麳]CF  K-婣硵艛?忌:鉁s?殸⑽矎?
                                    NF     
               515187266   9TD  傢ろ
04                 435853964   -TD 傘18娿
                    ?                    
  5? o欙L(     }   ~搁搁块€8362-406
務蠚崄u39E拞r           515187266   >TD 
ffffTA   ?{-%/%//>PWf@=Oφ≌οη∠┫

要求:分行显示数字串。
1,由于QQ号码与乱码中的数字可能因为直接过滤其他字符而导致过滤后QQ号码与乱码中的数字连在一起而无法分辨,所以 个人认为应该使用替换。
2,因为乱码存在类似8362-406的数字串,所以在过滤时不能过滤掉-
3,由于该乱码中存在数字,所以少于5位的连续数字串要求被删除。
4,因为乱码存在类似8362-406的数字串,这些不是QQ号码,删除中间含有-的数字串。
5,删除重复的数字串

提取QQ号码后的示例效果如下:

  Quote:
435853964
515187266

[ Last edited by Hanyeguxing on 2009-3-4 at 01:16 ]

2009-3-3 15:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 18 楼』:  

批处理文件名不能存成和命令一样的名字,不能存成COPY 和FR之类的




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-3-3 15:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 19 楼』:  

你就传一份文件上来吧




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-3-3 15:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 20 楼』:  

感谢楼上大大的热心

2009-3-3 18:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 21 楼』:  

还是先说明你这样做的目的吧
这样做究竟是为了什么
是为了把QQ号码提取出来,还是单纯就是要QQ号码之外的字符替换掉

[ Last edited by yishanju on 2009-3-4 at 00:17 ]




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-3-4 00:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 22 楼』:  Re 17楼

很早之前就有10位QQ号了^_^



2009-3-4 00:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 23 楼』:  



  Quote:
Originally posted by yishanju at 2009-3-4 00:13:
还是先说明你这样做的目的吧
这样做究竟是为了什么
是为了把QQ号码提取出来,还是单纯就是要QQ号码之外的字符替换掉

当然是为了把QQ号码提取出来。。。
我是这样做的:
1,首先,将文件备份,使用fr替换“-”与“0-9”之外的全部字符(因为乱码的数字中间有-,所以保留,例如801056-105)为Z。
2,然后将Z合并为空格
3,接着,以空格换行。但这个命令在运行中造成部分号码丢失及错误,不知道该怎么弄才好。
4,删除空行及空格,特殊字串
5,删除重复行

  Quote:
@echo off&setlocal enabledelayedexpansion
copy info.db isee1.txt>nul 2>nul
fr -ric:"[^-0-9]" -t:"Z" ISee1.txt
for /f "delims=" %%i in (ISee1.txt) do (
        set han=%%i
        >>ISee2.txt echo !han!
)
del ISee1.txt
fr -f:"ZZ" -t:"Z" ISee2.txt
find ISee2.txt "ZZ" && GOTO CC||fr -f:"Z" -t:" " ISee2.txt
for /f "tokens=1*" %%n in (ISee2.txt) do (
        set xing=%%n
        >>ISee1.txt echo !xing!
        >>ISee1.txt echo !xing!
)
del ISee2.txt
for /f "delims=" %%k in (ISee1.txt) do (
        set ye=%%k
        set "ye=!ye: =!"
        set "ye=!ye:012345789=!"
        set "ye=!ye:0123456789=!"
        >>ISee2.txt echo=!ye!
)
del ISee1.txt
setlocal disabledelayedexpansion
for /f "delims=" %%l in (ISee2.txt) do (
        if not defined %%l set %%l=A & echo %%l>>ISee1.txt
)

del ISee2.txt

。。。。。。

6,::删除带-的字串或行
::删除字串少于5位的行(乱码中的连续数字不会达到5位)
。。。。。。哎,没弄好呢

[ Last edited by Hanyeguxing on 2009-3-4 at 02:08 ]

2009-3-4 01:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 24 楼』:  

。。。。
这难度上了不是一个等级,我不会了




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-3-4 01:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 25 楼』:  



  Quote:
Originally posted by yishanju at 2009-3-4 01:27:
。。。。
这难度上了不是一个等级,我不会了

中途逃跑,是不厚道滴。。。。哈哈

2009-3-4 02:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 26 楼』:  


@echo off
echo 处理中,请稍等几分钟...
sed "s/[^0-9]/\n/g" Info.db>%temp%\a.txt
findstr ^[0-9][0-9][0-9][0-9][0-9]*[0-9]$ %temp%\a.txt>%temp%\b.txt
sort %temp%\b.txt>%temp%\c.txt
type nul>%temp%\d.txt
for /f "delims=" %%a in (%temp%\c.txt) do (
  findstr /x /c:"%%a" %temp%\d.txt>nul 2>nul||echo.%%a>>%temp%\d.txt
)
start %temp%\d.txt


   此帖被 +4 点积分        点击查看详情   
评分人:【 netbenton 分数: +2  时间:2009-3-4 07:57
评分人:【 Hanyeguxing 分数: +2  时间:2009-3-4 09:47




2009-3-4 05:37
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zqz0012005
中级用户




积分 297
发帖 135
注册 2006-10-21
状态 离线
『第 27 楼』:  


//&@cls&cscript -nologo -e:javascript "%~f0">r.txt&start r.txt&exit/b
WScript.Echo( new ActiveXObject("Scripting.FileSystemObject").OpenTextFile("Info.db").ReadAll().match( /[0-9]{6,10}/gim ).join("\n") );


   此帖被 +2 点积分    点击查看详情   
评分人:【 newxso 分数: +2  时间:2009-4-24 05:33




hh.exe ntcmds.chm::/ntcmds.htm
2009-3-4 21:55
查看资料  发短消息 网志  OICQ (411976538)  编辑帖子  回复  引用回复
ily2013
中级用户





积分 247
发帖 83
注册 2005-9-12
状态 离线
『第 28 楼』:  



  Quote:
Originally posted by HAT at 2009-3-4 05:37:
[code]@echo off
echo 处理中,请稍等几分钟...
sed "s/[^0-9]/\n/g" Info.db>%temp%\a.txt
findstr ^[0-9][0-9][0-9][0-9][0-9]*[0-9]$ %temp%\a.txt>%temp%\b.txt
sort %temp%\b ...

本来想按这个思路回复的,细看原来您先回了

2009-4-23 22:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 29 楼』:  

能否替换的时候,把所有非数字换为0a(换行符),可以的话,再加一个
for /f %%a in (...
就可以所有数字串提取出来了。
再判断%%a是否大于9999便知道是否为QQ号了
这样做速度会快很多。

[ Last edited by netbenton on 2009-4-23 at 22:55 ]

   此帖被 +1 点积分    点击查看详情   
评分人:【 freeants001 分数: +1  时间:2009-4-24 06:55




精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-24 00:50
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


积分 1488
发帖 1357
注册 2006-5-20
状态 离线
『第 30 楼』:  

再判断%%a是否大于9999便知道是否为QQ号了
这思路秒啊




有问题请发论坛或者自行搜索,再短消息问我的统统是SB
2009-4-24 03:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: