中国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 楼』:  

http://upload.cn-dos.net/img/1693.txt
真不知道怎么上传文件。,文盲啊。这样行不?

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

正在学习中的菜鸟...


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

注意:
1,此批处理需要第三方命令行工具 sed.exe ,从网址 http://ishare.iask.sina.com.cn/f/5621524.html 下载,然后和批处理保存在同一目录下,放到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 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
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 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
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中去



批处理之家 http://bbs.bathome.net/forum-5-1.html
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
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: