[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
第三方工具 有谁测试下吗 我这里貌似可以的
  1. gawk "BEGIN {FS=\"-\"} !a[$1 $2]++" y1.TXT>y2.txt
复制代码
测试代码这样的
  1. @echo off&setlocal enabledelayedexpansion
  2. echo 正在创建测试文件 y1.txt 请稍候
  3. for /l %%a in (1 1 1000) do (
  4. (for /l %%a in (1 1 2001) do echo !random!!random!!random!----!random!!random!!random!----!random!----!random!!)>>y1.txt
  5. (for /l %%a in (1 1 1001) do echo %random%----%random%----!random!!random!!random!----!random!!random!!random!)>>y1.txt
  6. )
复制代码
生成150MB左右的Y1文件
处理后 Y2文件 近100MB 左右
处理时间 13.5秒

[ 本帖最后由 terse 于 2009-5-30 13:30 编辑 ]

TOP

回复 30楼 的帖子

1、随便等于什么都可以,但是为了减少内存占用量,越短越好。

2、批处理for语句中tokens=*和delims=的区别是什么?
http://bbs.bathome.net/viewthread.php?tid=1654#pid8870
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原帖由 Kiming 于 2009-5-30 07:16 发表
为什么要 set %%i=s 就不能等于别的吗
“delims=" 这是什么意思啊 delims 是想删除什么啊


可以等于别的,比如set %%i=他妈
也可以,只要不是空就行

delims=这个你看下for名的帮助信息

另外既然是超大文本行,批处理效率一定不会多高,借助三方工具。。。
这里有个帖子看看:
http://www.linuxsir.org/bbs/showthread.php?t=132848

TOP

这个只能用第三方工具了。
正则表达式都不好使。
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

  1. @echo off
  2. for /f "delims=" %%i in (test.txt) do (
  3.     if not defined %%i set %%i=s & echo %%i>>result.txt)
复制代码

我是一个初学者,对上面一段代码我整整想了两三天,搞得我上班都没心情!
为了学好批处理,不上班的时候我常常在网吧一坐就是一整天(无奈几个月前买的联想本本用了不到一个月就被偷了,上班又不是上网)!
现在看到这贴总算心理舒服多了!

TOP

看来这个帖子要沉了,  zqz0012005是VBS高手,用VBS能否实现?

TOP

微软 脚本专家
如何从文本文件中删除所有重复行?
http://www.microsoft.com/china/t ... rces/hey050819.mspx
http://msdn.microsoft.com/en-us/library/ms974559
  1. Const adOpenStatic = 3
  2. Const adLockOptimistic = 3
  3. Const adCmdText = &H0001
  4. Set objConnection = CreateObject("ADODB.Connection")
  5. Set objRecordSet = CreateObject("ADODB.Recordset")
  6. strPathToTextFile = "C:\Scripts\"
  7. strFile = "Test.txt"
  8. objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
  9.       "Data Source=" & strPathtoTextFile & ";" & _
  10.           "Extended Properties=""text;HDR=NO;FMT=Delimited"""
  11. objRecordSet.Open "Select DISTINCT * FROM " & strFile, _
  12.     objConnection, adOpenStatic, adLockOptimistic, adCmdText
  13. Do Until objRecordSet.EOF
  14.     Wscript.Echo objRecordSet.Fields.Item(0).Value   
  15.     objRecordSet.MoveNext
  16. Loop
复制代码
速度还不错,但文本不能太复杂,因为有FMT=Delimited

或者通过Schema.ini文件指定按固定长度(但长度多少才算合适?)
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

这个...这个。我怎么一句也没看明白啊,好像是其它的脚本吧(我的英文水平太次,无法理解),这就是VBS 么?

TOP

回复 38楼 的帖子

找几个VBS基础教程看看吧
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

挖坟出来,研究研究。。。

TOP

外部命令的威力在处理超大文本是彰显无遗:
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in (y1.txt) do (
  3. set /a "n=(10000001+n)-(n/10000000)*10000000"
  4. echo !n:~-7!:%%a
  5. ))>1.tmp
  6. sort /rec 8198 /+8 1.tmp>2.tmp
  7. (for /f "tokens=1* delims=:" %%a in (2.tmp) do (
  8. if "%%b" neq "!l!" (
  9. echo %%a
  10. set l=%%b
  11. )
  12. ))>3.tmp
  13. findstr /b /g:3.tmp 1.tmp>4.tmp
  14. (for /f "tokens=1* delims=:" %%a in (4.tmp) do echo %%b)>y2.txt
  15. del /f /q ?.tmp
  16. (for /f "delims=" %%a in (y2.txt) do (
  17. set /p=%%a:<nul
  18. for /f "tokens=3" %%b in ('find /c "%%a" y1.txt') do echo 存在%%b行重复
  19. ))>check.txt
  20. pause
复制代码
未测试速度,但是不考虑对特殊字符的兼容性的情况下,这应该比if defined快

TOP

本帖最后由 zm900612 于 2011-4-27 14:08 编辑

发现一个问题,为什么测试文件y1.txt中重复行这么多,测试了下,每行都有1000行相同...剔除重复行以后只剩下105行,需要定义的变量很少,难怪if defined的办法没怎么受影响,竟然只要二十多秒...无语了

TOP

发现一个问题,为什么测试文件y1.txt中重复行这么多,测试了下,每行都有1000行相同...剔除重复行以后只剩下105行,需要定义的变量很少,难怪if defined的办法没怎么受影响,竟然只要二十多秒...无语了
zm900612 发表于 2011-4-27 14:05

那当然
测试代码只随机生成了100行文本
然后就通过四级for循环type复制到了1000000行
最后再加了五行随机文本
这样的样本代表性太弱了
天的白色影子

TOP

哦,没注意,我还以为和随机数种子有关呢...

TOP

随机种子只决定了随机数序列的一致性
而随机数的散列情况取决于随机算法

也就是说
同一个种子同一种算法
仍然会生成无穷个随机数
组成一个序列
而这个随机数序列总是一致的

另外
以上讨论的都是“伪随机”
计算机的组成原理决定了
不可能有绝对的随机算法存在
我们只是无限逼近随机
大多数情况下这种随机散列就足够了

当然
顶楼的算法连“伪随机”也算不上了
天的白色影子

TOP

返回列表