标题: [文本处理] 批处理怎样整合文件内容? [打印本页]
作者: 冰剑 时间: 2011-2-8 06:17 标题: 批处理怎样整合文件内容?
某文件夹下N级目录的N个test.txt文件,
看文件内容吧:
[{"UserName":"木木弄","UserId":270918,"DtSteelTime":new Date(1297085752093)},
{"UserName":"南北湾","UserId":268463,"DtSteelTime":new Date(1297091170156)},
{"UserName":"YoYoet","UserId":101761,"DtSteelTime":new Date(1297115332328)},
{"UserName":"黑白无常","UserId":67055,"DtSteelTime":new Date(1297106274375)},
{"UserName":"张恒浩","UserId":10474,"DtSteelTime":new Date(1297104946359)},
………………
{"UserName":"意义","UserId":64553,"DtSteelTime":new Date(1297116187531)}]
内容条目不确定,内容不确定,但是格式是确定的,看最后那个中括号前面没有逗号哦
,过滤相同的条目,然后把整合后的文件保存在批处理的目录下,文件名为abc.txt,最后再把整合后的文件覆盖回原来的文件(N个test.txt)。
说白了就是把不同软件收集的不同信息整合到一块,然后再共享。
批处理和VBS都可以
提示:上面内容为了方便查看规律我加了换行,实际的配置文件是没有换行的,加了换行的配置文件软件无法识别的,这也是我最犯愁的事了。
PS:两年多了没想到帐号密码还能想起来,真是不容易
[ 本帖最后由 冰剑 于 2011-2-8 18:26 编辑 ]
作者: hanyeguxing 时间: 2011-2-8 06:51
1,单个文件大小是否超过8192字节?
2,相同条目是否指整个大括号内的内容完全一样?是否忽略大小写?
3,比较相同是当个文件内比较,还是所有文件一起比较?
作者: 冰剑 时间: 2011-2-8 12:26
超过了,因为条目会不断增加
{"UserName":"可乐的微笑","UserId":286561,"DtSteelTime":new Date(1297174823796)},
{"UserName":"藜洛","UserId":10904,"DtSteelTime":new Date(1297190790015)},
{"UserName":"雄霸丶一方","UserId":99124,"DtSteelTime":new Date(1297191252515)},
{"UserName":"%abc%","UserId":%def%,"DtSteelTime":new Date%hij%},
只检测Userid的数值就可以
看附件内容
整合之后的文件进行比较
作者: 冰剑 时间: 2011-2-8 12:48
批处理工作原理是这样的:
1.首先历遍批处理所在目录下的所有N级子目录下的所有FarmSteel.txt文件
2.把文件内容中的中括号去掉,然后在内容结尾加入逗号,
3.然后在批处理目录下建立一个FarmSteel.txt文件,把内容添加到这个文件中
4.重复第二步操作并把数据追加到批处理目录下的FarmSteel.txt文件中
5.操作结束后去掉批处理目录下FarmSteel.txt文件中最后的那个逗号,并在开头和结尾分别加入中括号
6.过滤每个大括号内的内容是否有重复的,有重复的把重复的内容去掉,只保留唯一的一个
7.把所有子目录的FarmSteel.txt文件替换成批处理目录下FarmSteel.txt文件、
8.操作完成
备注:成功之后再次运行程序还会向文件中写入新的条目
所以以上步骤操作多次就会很多相同的内容,对吧?
所以加入了过滤重复内容。
作者: 冰剑 时间: 2011-2-8 18:42 标题: 批处理整合文件内容处理
原帖因版主未重视不再更新http://www.bathome.net/viewthread.php?tid=10997&page=1&extra=page%3D1
文件内容:
[{"UserName":"木木弄","UserId":270918,"DtSteelTime":new Date(1297085752093)},
{"UserName":"南北湾","UserId":268463,"DtSteelTime":new Date(1297091170156)},
{"UserName":"YoYoet","UserId":101761,"DtSteelTime":new Date(1297115332328)},
{"UserName":"黑白无常","UserId":67055,"DtSteelTime":new Date(1297106274375)},
{"UserName":"张恒浩","UserId":10474,"DtSteelTime":new Date(1297104946359)},
………中间省略N个条目………
{"UserName":"意义","UserId":64553,"DtSteelTime":new Date(1297116187531)}]
1.首先历遍批处理所在目录下的所有N级子目录下的所有(N个)FarmSteel.txt文件
2.把文件内容中的中括号去掉,然后在内容结尾加入逗号,
3.然后在批处理目录下建立一个FarmSteel.txt文件,把步骤2内容添加到这个文件中
4.重复第二步操作并把数据追加到批处理目录下的FarmSteel.txt文件中
5.操作结束后去掉批处理目录下FarmSteel.txt文件中最后的那个逗号,并在开头和结尾分别加入中括号
6.特别说明一下:源文件是没有换行的,所以在这里把每个条目加入换行,就是单个条目为一行,像上面示例中的内容一样,结尾逗号保留
7.过滤是否有重复内容的行,有重复的把重复的内容去掉,只保留唯单个的内容(只要检测USERID对应的数据是否相同就可以,因为这个是唯一的)
8.保存文件
9.把所有子目录的FarmSteel.txt文件替换成批处理目录下FarmSteel.txt文件、
8.操作完成
特别解释一下,这个配置文件是某游戏外挂的偷菜队列信息,USERNAME是用户名 USERID是用户的ID信息,都是唯一的,NEW DATE 后面的数据是成熟信息,加密方式目前未知
目的就是把几个帐号的信息整理到一块然后共享,这样大大加快数据采集速度。
谢谢版主的支持。
多谢管理员提醒,确实喝的眼睛发花了
[ 本帖最后由 冰剑 于 2011-2-8 19:15 编辑 ]
作者: Batcher 时间: 2011-2-8 19:12
你今天不会是走亲戚在酒场上喝高了吧?
这里不是“非常批处理论坛”^_^
作者: 冰剑 时间: 2011-2-8 19:19
回复:
1,单个文件大小是否超过8192字节?
答:这个我查阅资料发现批处理对单行大量数据处理能力无能为力,抱歉,没有考虑太多
2,相同条目是否指整个大括号内的内容完全一样?是否忽略大小写?
大括号内的内容肯定是一样的,大小写也是固定的
3,比较相同是当个文件内比较,还是所有文件一起比较?
比较相同的内容整合之后的文件,过滤掉重复的内容,减小外挂加载重复信息造成的错误处理
作者: asnahu 时间: 2011-2-8 19:54
人品太差,不再提供任何帮助。
[ 本帖最后由 asnahu 于 2011-2-9 13:31 编辑 ]
作者: 冰剑 时间: 2011-2-8 20:34
原帖由 asnahu 于 2011-2-8 19:54 发表
gawk+sed:@echo off
cd.>temp_
for /r %%i in (FarmSteel*) do (
gawk -f a.awk "%%i"
)
gawk -f b.awk temp_ | sed "s/^/[/; $s/,$/]/" > all.txt
del temp_
start all.txt
exita.awk{
g ...
请问WINDOWS支持LINUX的命令行么?
如果支持怎么调用,是不是需要安装对应的软件呢?
作者: 冰剑 时间: 2011-2-8 21:02
经测试无效,希望版主和热心会员能帮我,因为我很急用
作者: hanyeguxing 时间: 2011-2-8 22:18 标题: 回复 5楼 的帖子
不是俺不重视,是俺一看到UTF-8编码的文件就开始打酱油。。。
作者: 冰剑 时间: 2011-2-9 00:08 标题: 要整合的文件,可以拿这个作为试验
要整合的文件,可以拿这个作为试验
如果需要第三方插件麻烦按照文件位置放好后重新打包上传到回帖里面,谢谢
作者: CrLf 时间: 2011-2-9 04:35
我不想骂人,但是你顶楼给的信息简直是在误导,写了半天一调试就出错,一查才知道顶楼说的和附件中例子根本不一样。
请尊重他人的无偿劳动,不要给出自相矛盾的要求。
代码写好了,反正不能用不是我的错:- @echo off &setlocal enabledelayedexpansion
- cd.>abc.txt
- dir>dirtmp /s /a-d /b 待处理文件夹\test.txt
- (for /f "delims=" %%a in (dirtmp) do copy abc.txt+"%%a" abc.txt)>nul
- (for /f "tokens=1-3* delims=:" %%a in ('sort abc.txt') do (
- set tmp=%%c
- echo>con %%c
- if !tmp!==%%c echo %%a:%%b:%%c:%%d
- ))>test.txt
- for /f "delims=" %%a in (dirtmp) do replace /s /r test.txt 待处理文件夹\
- pause
复制代码
其实若要同步文件建议用硬链接,当然前提是磁盘时ntfs格式,而且不能跨分区,而且硬链接数不能超过1024
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |