中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]求查找含指定字符串的最后一行和它的上一行
作者:
标题: [已结]求查找含指定字符串的最后一行和它的上一行 上一主题 | 下一主题
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『楼 主』:  [已结]求查找含指定字符串的最后一行和它的上一行

想得这样的代码:

用会员名为指定字符串,查找文档a.txt,查某一个人的最后登陆时间,查到后,将他的名字和上一行登陆时间这两行记录写入b.txt,并打开b.txt,查不到人,就提示"没此人的登陆信息!"


a.txt的格式如下:

2008.12.02 14:07
黄明辉

2008.12.02 14:16
留元元

2008.12.02 18:05
陈东

2008.12.02 18:14
张建

2008.12.02 19:02
留元元

2008.12.02 19:05
张建

2008.12.02 19:10
陈东




如果假定要查的字符串为"张建",想得到的b.txt为:

2008.12.02 19:05
张建



注:可能一个人有多次登陆记录,只想要得到最后一次登陆时间..

[ Last edited by ka56 on 2009-2-17 at 14:21 ]

2009-2-17 04:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 2 楼』:  

有劳大虾们指导下,谢谢!

明早再来看看....嘿嘿~~

2009-2-17 04:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 3 楼』:  

不知道复杂不?哈~~

2009-2-17 10:33
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yishanju
银牌会员

[b]看你妹啊[/b]


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

findstr 不支持跨行正则。。比较麻烦
用SED GREP 之类的话可能就一行代码




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





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

提取文本的指定行的上一行
http://www.cn-dos.net/forum/viewthread.php?tid=42070



2009-2-17 11:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 6 楼』:  

谢谢H版,您太伟大了!
两行都能显示出来了,能达到目的,谢谢....有空我多学学!

2009-2-17 12:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 7 楼』:  


@echo off
set /p Name=请输入要查找的会员名:
setlocal enabledelayedexpansion
for /f "delims=" %%a in (a.txt) do (
  if "%%~nxa" neq "%Name%" (
    set 其他行=%%a
  ) else (
    set 前一行=!其他行!
  )
)

if not defined 前一行 (
  echo 没此人的登陆信息!
  pause
) else (
  (echo %前一行%&echo %Name%)>b.txt
  start b.txt
)


2009-2-17 12:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 8 楼』:  

受教了!向您学习..
另请教下如果会员名那行包含其他字符,只提供会员名"张建",能否实现?

a.txt这样:
2008.12.02 14:07
黄明辉 198000142

2008.12.02 14:16
留元元 198000280

2008.12.02 18:05
陈东 198001087

2008.12.02 18:14
张建 198000211

2008.12.02 19:02
留元元 198000280

2008.12.02 19:05
张建 198000211

2008.12.02 19:10
陈东 198001087

2009-2-17 13:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 9 楼』:  Re 8楼

那名字后面的字符是否要输出到 b.txt ?

2009-2-17 13:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 10 楼』:  

是的.
另能解释下"%%~nxa"和!其他行!的意思吗?

[ Last edited by ka56 on 2009-2-17 at 13:44 ]

2009-2-17 13:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 11 楼』:  


@echo off
set /p Name=请输入要查找的会员名:
setlocal enabledelayedexpansion
for /f "tokens=1,*" %%a in (a.txt) do (
  if "%%a" neq "%Name%" (
    set 其他行=%%a %%b
  ) else (
    set 前一行=!其他行!
    set Name=%%a %%b
  )
)

if not defined 前一行 (
  echo 没此人的登陆信息!
  pause
) else (
  (echo %前一行%&echo %Name%)>b.txt
  start b.txt
)
1. %%~nxa
你顶楼的文本 a.txt,名字后有空格,用 %%~nxa 去掉尾部的空格。

2. !其他行!
除了 %Name% 外的行,其余的行赋值给变量 其他行
当碰到 %Name% 所在行时,就把上一个 !其他行! 赋值给变量 前一行

[ Last edited by tireless on 2009-2-17 at 14:54 ]

   此帖被 +2 点积分      点击查看详情   
评分人:【 netbenton 分数: +2  时间:2009-2-17 18:53


2009-2-17 14:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

如果有人帮你解决了问题,建议进行以下操作:

1、修改帖子标题,在标题最前面注明:[已结]

2、给正确回答问题者加分以示感谢,虽然大家来论坛是为了学习而不是为了积分,但加分聊表谢意总是或多或少能够让花费了时间和精力无私帮助你的人略感欣慰。

3、如果你是在别人的提示下自己写出了代码,请把自己的方法贴出来跟大家分享一下,也许他人可以帮你指出代码中的不足之处、告诉你如何提高执行效率等,有交流才能更快地进步。



2009-2-17 14:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 13 楼』:  

很详细,能明白大概了,谢谢您!!

2009-2-17 14:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: