标题: 帮忙解释代码:在QQ好友中寻找08年1至9月没有联系的好友
[打印本页]
作者: bluemanlb
时间: 2009-1-8 10:23
标题: 帮忙解释代码:在QQ好友中寻找08年1至9月没有联系的好友
for /f "tokens=2 delims=()" %%i in (message.txt) do findstr "2008-0[1-9]-" 3120.txt ^| find "%%i" || echo %%i >>result.txt
上面代码的目的就是在QQ好友中寻找08年1至9月没有联系的好友的QQ。
其中message.txt里面的文件格式如下 :
消息对象:冰雪*~无情(229244313)
消息对象:♀恋依/珍(282162453)
3120.txt里面的内容就是我从QQ消息管理器里面导出QQ聊天记录文体.
我有如下的一些疑问,还望高手可以帮我解释一下,谢了.
1、程序中delims=()表示在文件中用()分隔,是不是所有含有“()”的行只能用"()"进行分隔,其中takens=1即为括号外面的内容,tokens=2就是括号里面的内容。例如上例中就是括号的QQ号?
2、这段代码: findstr "2008-0[1-9]-" 3120.txt ^| find "%%i"是不是就是在指定日期的聊天记录里查寻相关的QQ号码(即%%i变量)有没有聊天记录。但是我在DOS里试了一下,findstr "2008-0[1-9]-" 3120.txt 只能生成这样的文件格式: 2008-9-15 18:25:58 QQ名字
里面并没有QQ号,所以即使有聊天记录,上面的代码也是无法查到的吧?但为何程序可以实现其功能呢?望解释一下,谢了。
———————————————————————
转移自 DOS疑难解答 & 问题讨论 (解答室)
明显发错版块,予以扣分处理。
——管理员
———————————————————————
───────────────── 版务记录 ─────────────────
执行:HAT
操作:[20098-01-08]在帖子标题中增加搜索关键字;代码加code标签
说明:原标题"for的问题,请高手帮我解释一下下面的这段代码?"不利于论坛搜索
处罚:扣除2点积分
提示:建议阅读以下帖子
{1415}提问的智慧
{7326}论坛新手必读,所有人的基本行为准则
{22703}请不要做浮躁的人
{32667}[愤怒]那些连标题都写不清楚的人们啊,你们醒醒吧
{32825}本版严厉整顿烂帖
───────────────── 版务记录 ─────────────────
[
Last edited by HAT on 2009-1-8 at 11:22 ]
作者: bluemanlb
时间: 2009-1-8 12:59
有人帮我解答一下吗?谢了
作者: exzzz
时间: 2009-1-8 14:54
Quote: |
Originally posted by bluemanlb at 2009-1-8 10:23 AM:
for /f "tokens=2 delims=()" %%i in (message.txt) do findstr "2008-0[1-9]-" 3120.txt ^| find "%%i" || echo %%i >>result.txt 上面代码的目的就 ... |
|
我看的不是很明白。。。
第一个问题,【DELIMS=()】,是说以【(】或【)】符号为分隔符,takens=1表示取第一个分隔符之前的内容并赋值给%%i,takens=2,则第一到第二个分隔符之间的值赋值给%%i
举例:
("X(Y)Z)(") 中,如若takens=1,2,3,4 那么%%i就等于X,%%j等于Y,如果takens=2,3,4,那么 %%i等于Y,%%j等于Z
例如
for /f "takens=2 delims=()" %%i in ("X(Y)Z)(") do echo %%i
结果等同于
for /f "takens=1 delims=()" %%i in ("X(Y)Z)(") do echo %%j
第二个问题,你前面半截说的是对的,后面半截,因为我不知道你的txt文件的内容格式,所以无法解答了
作者: bluemanlb
时间: 2009-1-9 10:45
EX.我的那个文件的格式就是QQ聊天记录导出来的文本格式,你可以导一下自己的QQ聊天记录,谢了.
作者: exzzz
时间: 2009-1-10 13:14
首先要指出,你这条语句不对,因为不论3120.txt是否包括所有人的聊天记录,执行的结果都是所有人都在result.txt中。原因自己考虑一下吧。
现在解释你第2个疑问。
如果findstr 在查找 2008-01到2008-09的时候成功,也就是该用户在此期间联系过,所以findstr直接显示包含这个时间的行,确实,这行不含有用户的号码。但也因此find XXXX会失败,因为||,执行前面命令失败,因此会执行【 echo 号码 >>result.txt】
但是如果findstr失败了呢?findstr就会提示提示【FINDSTR: 无法打开 XXXXXXX】,从而【find xxxxx “FINDSTR: 无法打开 XXXXXXX”】就成功了,因此就不会执行了 echo %%i 的命令。
其中的^和|以及||请自行参考
http://www.cn-dos.net/forum/view ... =%E7%AC%A6%E5%8F%B7
[
Last edited by exzzz on 2009-1-10 at 13:26 ]
作者: exzzz
时间: 2009-1-10 13:18
del /f /q result.txt&for /f "tokens=2 delims=()" %%i in (friends.txt) do (findstr "2008-0[1-9]-" %%i.txt ^| find "%%i" || echo %%i>>result.txt)
把好友列表保存为friends.txt,例如其中包含 123456 这个号码
然后导出好友聊天记录,按号码命名,例如有123456.txt 这个聊天记录
再执行以上命令就可以了。
[
Last edited by exzzz on 2009-1-10 at 13:27 ]