中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]批量统计文本中有效电话号码并粘贴到excel表中?
作者:
标题: [求助]批量统计文本中有效电话号码并粘贴到excel表中? 上一主题 | 下一主题
anykill
新手上路





积分 6
发帖 6
注册 2009-9-16
状态 离线
『楼 主』:  [求助]批量统计文本中有效电话号码并粘贴到excel表中?

现我有很多附件中那样的文件,目的就是提取出其中此人常联系的有效号码。什么1008611,10661700之类的除外。并把提取出的10个有效号码粘贴到一个excel表格的对应此文件名的行的某列中,因为数据实在是太多了。之前都是用excel排序人工弄的。效率实在太低了。而且很折磨人啊。试过了很多办法都不知道怎么办。茫然啊。望高人指点一下迷津,给个思路也行。具体用什么比较好解决。之前查到一个叫replace pioneer的软件,里面有个叫pattern counter的工具可以导入文本文件并统计排序,只要设置下参数,比如\d{7,}就是统计7位以上数据的,但是他这个软件并不能让我批处理这么多文件。苦恼哦。


2009-9-17 06:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
anykill
新手上路





积分 6
发帖 6
注册 2009-9-16
状态 离线
『第 2 楼』:  

你们找得到我上传的文件吗。叫1693.txt,第一次上传。。在什么上传系统里面


2009-9-17 07:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
xiaofei120
新手上路





积分 14
发帖 14
注册 2009-9-8
状态 离线
『第 3 楼』:  

没看到。。。。


2009-9-17 07:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
anykill
新手上路





积分 6
发帖 6
注册 2009-9-16
状态 离线
『第 4 楼』:  

rthost.fam.cx/cndos- ... 真不知道怎么上传文件。,文盲啊。这样行不?


2009-9-17 08:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


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

注意: 1,此批处理需要第三方命令行工具 sed.exe ,从网址 ishare.iask.sina.com.cn ... 下载,然后和批处理保存在同一目录下,放到system32目录下也可。 2,1693.txt为原始源文件,I.txt为输出文件 3,>I.txt echo 序号 次数 电话号码,中间是制表符,不是一串空格 4,if !C! lss 11 >>I.txt echo !C! !E! %%j),中间是制表符,不是一串空格
@echo off&setlocal enabledelayedexpansion&>I.txt echo 序号	次数	电话号码
for /f "delims=" %%i in ('sed "s/[^0-9-]/\n/g" 1693.txt ^| findstr ^[0-9][0-9][0-9][0-9][0-9][0-9][0-9]*[0-9]$') do (set A=%%i
if "!A:~0,3!" neq "000" if "!A:~0,2!" neq "10" if "!A:~0,4!" neq "2009" (if "!A:~0,5!" == "17951" set A=!A:~5!)&set /a A_!A!+=1)
for /f "tokens=2,3 delims==_" %%i in ('set ^| findstr "^A_"') do set B=00000000%%j&set C_!B:~-9!:%%i==
for /f "tokens=2,3 delims==_:" %%i in ('set ^| findstr "^C_" ^| sort /r') do (set /a C+=1
call :D %%i
if !C! lss 11 >>I.txt echo !C!	!E!	%%j)
start notepad I.txt&exit
:D
set E=%1
:F
if "!E:~0,1!" == "0" set E=!E:~1!&goto F
输出结果示例: 序号 次数 电话号码 1 1280 134****0555 2 1163 135****8816 3 154 137****5982 4 76 081****2445 5 48 800****54107 6 44 132****5767 7 43 153****1636 8 43 132****3700 9 35 138****4200 10 26 159****6315 ...... 将此文本中内容直接在 excel 中粘贴就可以。 [ Last edited by Hanyeguxing on 2009-9-18 at 07:53 ]




2009-9-17 08:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
anykill
新手上路





积分 6
发帖 6
注册 2009-9-16
状态 离线
『第 6 楼』:  

非也非也,我提取出的号码就是他常联系其他人的号码,为了就是找到本人。不要滤除10位以下的数字啊,我是说找到他常联系的10个人的号码比如13688888888,15988888888,8234888,0107654321之类的,不用排列不排列了,只要出现次数多的前10个号码就把他们粘出来就好了


2009-9-17 09:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


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

@echo off 关闭回显及不显示本行。 setlocal enabledelayedexpansion 启用变量延迟。 >I.txt echo 序号 次数 电话号码 创建文本 I.txt 并输出内容“序号 次数 电话号码”。 sed "s/[^0-9-]/\n/g" T.txt 提取文本中所有数字,每组数字都独立一行,并忽略所有敏感字符。 findstr ^[0-9][0-9][0-9][0-9][0-9][0-9][0-9]*[0-9]$ 从 sed 操作的结果集中搜索符合条件的数字,即7位以上的数字。 for /f "delims=" %%i in ( 解析 sed 和 findstr 的结果集。 set A=%%i 将解析所获取的值赋值给变量 A 。 if "!A:~0,3!" neq "000" 截取变量 A 的前3个字符,判断其是否为 000 ,否则... if "!A:~0,2!" neq "10" 截取变量 A 的前2个字符,判断其是否为 10 ,否则... if "!A:~0,4!" neq "2009" 截取变量 A 的前4个字符,判断其是否为 2009 ,否则...(以上3个 if 的语句为与逻辑。) if "!A:~0,5!" == "17951" set A=!A:~5! 截取变量 A 的前5个字符,判断其是否为 17951 ,是则截取其第6个字符及其后面所有字符,并赋值给变量 A 。 set /a A_!A!+=1 设置变量集并计数。其中,变量名为: A_!A! : A_ 为前缀, !A! 为后部分,由以上4个 if 语句判断获得。 set 输出所有环境变量。 findstr "^A_" 从环境变量中过滤出变量名字首为 A_ 的所有变量。 for /f "tokens=1,2 delims==_" %%i in ( 解析过滤后的环境变量,以 = 和 _ 为区段分隔符。变量名赋值给 %%i ,变量的值赋值给 %%j 。 set B=00000000%%j 将变量 %%j 前加8个0,并赋值给变量 B 。 set C_!B:~-9!:%%i== 设置变量集。每个变量的值均是 = 。变量名是 C_!B:~-9!:%%i ,其中 C_ 为前缀, B:~-9! 为前部,由变量 B 截取最后9个字符获得, : 为中间部分,为下一语句分隔用, %%i 为后部分。 findstr "^C_" 从环境变量中过滤出变量名字首为 C_ 的所有变量。 sort /r 对 findstr 的结果集进行排序, /r 指定反向排序。 for /f "tokens=1,2 delims==_:" %%i in ( 解析过滤后的环境变量,以 = 、 _ 和 : 为区段分隔符。变量名前半部分赋值给 %%i ,变量名后半部分赋值给 %%j 。 set /a C+=1 加计数,并将累积值赋值给变量 C 。 call :D %%i 调用标签 :D ,并传递变量 %%i 为第一个参数 %1 。 >>I.txt echo !C! !E! %%j 输出变量 !C! 、!E! 和 %%j 。 if !C! lss 11 ( 判断变量 C 是否小于11,是则... start notepad I.txt 使用记事本程序打开文本 I.txt ,并不等待关闭退出这个程序。 exit 退出本批处理。 set E=%1 将传递的参数 %1 设置为变量 E 。 if "!E:~0,1!" == "0" set E=!E:~1!&goto F 截取变量 E 的第一个字符并判断其是否为0,如果不是,退出标签 :D ;如果是0,则截取第2个字符及后面所有字符,即去掉这个0,并赋值给变量 E 。然后返回标签 :F ,重复这个操作,直到变量 E 的字首没有0为止。 [ Last edited by Hanyeguxing on 2009-9-18 at 08:02 ]




2009-9-17 11:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
anykill
新手上路





积分 6
发帖 6
注册 2009-9-16
状态 离线
『第 8 楼』:  

呵呵,真好用,我刚试了下,剩下的就该我好好去消化学习一下这些代码,好改成真正适合自己的东西。还有就是能不能让这10个号码自动的就导入一个excel表的指定位置去啊。完了就是把一个文件夹里面所有的txt原始数据都像这条那样自动一个一个往excel里面导


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

正在学习中的菜鸟...


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

你可以将多个这样的处理后的文本合并到一个文本中,使用制表符分隔好,最后一次性粘贴到excel中去




2009-9-18 06:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
anykill
新手上路





积分 6
发帖 6
注册 2009-9-16
状态 离线
『第 10 楼』:  

恩,很多问题还需要处理,我刚接触这个,代码看起来好火星。我慢慢消化一下再问吧,最后还是得靠自己的努力。不能有什么不懂的就开问,多谢大家带我走进这扇大门啊。温暖的社会主义大家庭


2009-9-18 08:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
iqplhui
新手上路





积分 1
发帖 1
注册 2009-10-1
状态 离线
『第 11 楼』:  

慢慢看,学习中~~


2009-10-2 10:12
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: