中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 新。怎么从一个文本中提取特定内容追加到另一个文件
作者:
标题: 新。怎么从一个文本中提取特定内容追加到另一个文件 上一主题 | 下一主题
provem
初级用户





积分 92
发帖 82
注册 2007-11-13
状态 离线
『楼 主』:  新。怎么从一个文本中提取特定内容追加到另一个文件

比如

boy于2008-12-09 星期二  0:18:29.28对girl说: 在哪里
boy于2008-12-09 星期二  0:32:19.29对lily说: 现在有空吗?
girl于2008-12-09 星期二 19:38:15.81对lily说:今天好郁闷
lily于2008-12-09 星期二 19:39:43.12对boy说: 现在在上班
girl于2008-12-09 星期二 19:40:32.41对boy说: 在家呢
boy于2008-12-09 星期二 19:40:50.16对girl说: 出来吧!
lily于2008-12-09 星期二 22:06:13.67对boy说: 有事吗?

只提取以下内容出来,并保存到另一个文本文件
boy于2008-12-09 星期二  0:18:29.28对girl说: 在哪里
boy于2008-12-09 星期二  0:32:19.29对lily说: 现在有空吗?
lily于2008-12-09 星期二 19:39:43.12对boy说: 现在在上班
girl于2008-12-09 星期二 19:40:32.41对boy说: 在家呢
boy于2008-12-09 星期二 19:40:50.16对girl说: 出来吧!
lily于2008-12-09 星期二 22:06:13.67对boy说: 有事吗?

就比如我是boy,只提取我和lily和girl的聊天记录,而不能提取lily和girl的聊天记录,文件内容格式是固定的

先谢谢各位大哥

[ Last edited by provem on 2008-12-10 at 18:27 ]

2008-12-9 23:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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


findstr "boy" a.txt>另一个文本文件.txt




2008-12-9 23:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
provem
初级用户





积分 92
发帖 82
注册 2007-11-13
状态 离线
『第 3 楼』:  

谢谢Hat版主,注册了一年了,一直没时间来,以后会常来,哈哈

[ Last edited by provem on 2008-12-9 at 23:30 ]

2008-12-9 23:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
provem
初级用户





积分 92
发帖 82
注册 2007-11-13
状态 离线
『第 4 楼』:  

Hat,如果lily和girl的聊天内容含有"boy"的话,那不是也被提取出来了吗?能不能根据聊天内容的格式做到准备的提取呢

2008-12-9 23:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
provem
初级用户





积分 92
发帖 82
注册 2007-11-13
状态 离线
『第 5 楼』:  

如果我把上面找到的内容从文件里删除应该怎么做呢?就相当于删除聊天记录

2008-12-10 09:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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


@echo off
type nul>另一个文本文件.txt
for /f "delims=" %%a in (a.txt) do (
  set str=%%a
  setlocal enabledelayedexpansion
  echo !str:~0,36!|findstr "boy">nul
  if !errorlevel! equ 0 (
    >>另一个文本文件.txt echo.%%a
  )
  endlocal
)


   此帖被 +1 点积分    点击查看详情   
评分人:【 provem 分数: +1  时间:2008-12-10 18:33




2008-12-10 10:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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


@echo off
type nul>临时文本文件.txt
for /f "delims=" %%a in (a.txt) do (
  set str=%%a
  setlocal enabledelayedexpansion
  echo !str:~0,36!|findstr "boy">nul
  if !errorlevel! neq 0 (
    >>临时文本文件.txt echo.%%a
  )
  endlocal
)
move /y 临时文本文件.txt a.txt




2008-12-10 10:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
provem
初级用户





积分 92
发帖 82
注册 2007-11-13
状态 离线
『第 8 楼』:  

谢谢,因为在做局域网信使聊天程序,想保存聊天记录,现在已经没什么大问题了,还在学习中

2008-12-10 10:54
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
provem
初级用户





积分 92
发帖 82
注册 2007-11-13
状态 离线
『第 9 楼』:  

版主,我发现当聊天记录文件数据多的时候,这个处理方式有点慢,还有没有处理速度快点的方法

2008-12-10 16:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





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

提取:
@echo off
set 原文件=a.txt
set 提取后的文件=b.txt
for /f "delims=: tokens=1,*" %%a in ('^(findstr /n "^boy.*对lily说:" "%原文件%"^&findstr /n "^boy.*对girl说:" "%原文件%"^&findstr /n "^girl.*对boy说:" "%原文件%"^&findstr /n "^lily.*对boy说:" "%原文件%"^)^|sort') do >>"%提取后的文件%" echo.%%b
删除聊天记录:
@echo off
set 原文件=a.txt
set 删除后的文件=d.txt
findstr /v "^boy.*对lily说:" "%原文件%"|findstr /v "^boy.*对girl说:"|findstr /v "^girl.*对boy说:"|findstr /v "^lily.*对boy说:">"%删除后的文件%"
[ Last edited by tireless on 2008-12-10 at 21:52 ]

2008-12-10 20:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
provem
初级用户





积分 92
发帖 82
注册 2007-11-13
状态 离线
『第 11 楼』:  

谢谢tireless,感觉测试的时候,会产生重复的聊天记录,比如我这次查看聊天记录会产生一次,明天再看聊天记录,又叠加产生昨天产生的那些聊天记录

2008-12-11 00:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
provem
初级用户





积分 92
发帖 82
注册 2007-11-13
状态 离线
『第 12 楼』:  

我的想法是把一个局域网的所有聊天记录都保存在一台电脑上(当主机),每个人都可以查看自己发给别人的记录和别人发给自己的记(不能看不是自己发的,也不是发给自己的聊天记录),这里用的是Net send的方法接收信息,所以想到以这种方法保存聊天记录
以下我的正在调试的程序,大家看能不能完善下代码
:A_chat
set /p Main_Messege=请输入你将要发送的信息:
if "%Main_Messege%"=="2" goto ChatLog  ::转到查看聊天记录
if "%Main_Messege%"=="" (
goto A_chat
) else (
echo %ME%于%date% %time%对%Local_IP_Name%说: %Main_Messege%>>\\server\news\chatlog\chatlog.txt
echo.正在发送信息,请稍等...
net send %sendname% %Main_Messege%
pause
goto A_chat
)

:ChatLog
cls
echo.-----------------------------------------------------
type nul>%tmp%"\"chatlog.txt
for /f "delims=" %%a in (\\server\news\chatlog\chatlog.txt) do (
  set str=%%a
  setlocal enabledelayedexpansion
  echo !str:~0,40!|findstr "%ME%">nul
  if !errorlevel! equ 0 (
    >>%tmp%"\"chatlog.txt echo.%%a
  )
  endlocal
)
::findstr "%COMPUTERNAME%" \\server\news\chatlog\chatlog.txt>%tmp%"\"chatlog.txt
type %tmp%"\"chatlog.txt|more&echo.&echo.&echo.&pause
goto A_chat
以上代码输出的聊天格式为

boy于2008-12-09 星期二  0:18:29.28对girl说: 在哪里
boy于2008-12-09 星期二  0:32:19.29对lily说: 现在有空吗?
girl于2008-12-09 星期二 19:38:15.81对lily说:今天好郁闷
lily于2008-12-09 星期二 19:39:43.12对boy说: 现在在上班
girl于2008-12-09 星期二 19:40:32.41对boy说: 在家呢
boy于2008-12-09 星期二 19:40:50.16对girl说: 出来吧!
lily于2008-12-09 星期二 22:06:13.67对boy说: 有事吗?

以这种代码的处理方式感觉聊天记录多了,速度有点慢,大家帮我看看应该怎么改进

[ Last edited by provem on 2008-12-11 at 12:32 ]

2008-12-11 00:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





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

Q: 为方便他人复制,如何给代码加code标签?
A: http://www.cn-dos.net/forum/viewthread.php?tid=43735#pid304733
参考:http://www.cn-dos.net/forum/faq.php?page=misc#1




2008-12-11 11:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: