中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-05 04:19
48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » 如何按空格切分人名
可打印版本  1,157 / 10
第1楼 26933062 发表于 2007-06-21 17:53
银牌会员 发帖 879 积分 2,268
如何按空格切分人名
a.txt中的每一行都是人名,
特点是:每个名字都用空格分开的,但是两个字的名字中,有的是名字中含空格,有的没有.
并且每一行的名字的数量也不一定
现在我要将a.txt中的所有人名都写入到b.txt中,并且是一行一个名字.
请问有什么办法吗?

a.txt中的部分内容如下
张 三 李四 王二麻子 周 平 李建国 张文 李 军
周 平 王二麻子 周 平 李建国 张 文 李军 王二麻子 周 平 李建国
张三 李 四 王二麻子 周平 李建国 张 文 李 军 王二麻子 周 平 李建国
李建国
王二麻子 周 平 李建国
周 平 张 三
王二麻子 周平 李建国


[ Last edited by bjsh on 2007-7-31 at 12:44 PM ]
第2楼 youxi01 发表于 2007-06-21 19:27
高级用户 发帖 247 积分 846 来自 湖南==》广东
把那个 文件发出来才好给意见的,否则都是猜测
第3楼 zh159 发表于 2007-06-22 02:10
金牌会员 发帖 1,467 积分 3,687
比较麻烦
给个思路:

空格分隔后,判断是否为单个字符,如果是,加上后面一个字符,如果不是,用其本身
第4楼 lxmxn 发表于 2007-06-22 03:42
版主 发帖 4,938 积分 11,386

Sed下载 17 楼
http://www.cn-dos.net/forum/viewthread.php?tid=30573
第5楼 26933062 发表于 2007-06-22 06:18
银牌会员 发帖 879 积分 2,268
版主的 sed 确实是方便,能解释一下 它是凭什么来确定人名的吗?
我试过将三个字的名字也用空格分开,它也能辨认.
我怕弄错,谢谢!!!!!!
第6楼 namejm 发表于 2007-06-22 07:21
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  除了使用第三方软件,纯P并非不能胜任:

  原来还要求一行一个名字啊,那就用下面这个代码吧:


[ Last edited by namejm on 2007-6-22 at 11:59 PM ]
第7楼 bjsh 发表于 2007-06-22 10:41
银牌会员 发帖 621 积分 2,000
if !num! equ 2 (
set /p=%%i<nul&echo.
set num=0
) else set /p=%%i<nul&if !num! equ 0 echo.
第8楼 lxmxn 发表于 2007-06-22 12:54
版主 发帖 4,938 积分 11,386
RE 26933062:

sed "s/..\{1,\}/\n&/g" names.txt|findstr "."|more>newfile.ext


首先sed会对第一对//里面的正则表达式进行匹配,如果符合这个模式的就换行之后输出,这样就可以一行一个姓名了。

关键的匹配模式是这个“..\{1,\}”。因为一个中文字符在sed里面用两个“.”表示匹配,又因为每个姓名至少是用三个“.”来匹配,所以前面用“..”来匹配一个姓名的开头,然后用“\{1,\}”来匹配至少一个的非空字符,所以匹配到一个姓名的前三个“...”之后,遇到空格就停止匹配,所以类似你上面格式的包含姓名的字符都将被这样来处理,最终达到目的。
第9楼 26933062 发表于 2007-06-23 02:12
银牌会员 发帖 879 积分 2,268
谢各位,强!!
学习!!!
第10楼 huihuil 发表于 2007-06-23 08:48
新手上路 发帖 1 积分 2
学习了.谢谢
第11楼 flyinthesky 发表于 2007-06-23 20:28
初级用户 发帖 17 积分 34
好好学习天天向上!
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023