xiehuahere 发表于 2010-4-13 11:49:44

TXT日志文件,AU3有没有办法从最后一行开始向前读[已解决]

本帖最后由 xiehuahere 于 2010-4-13 19:25 编辑

据我所知,貌似VBS做不了,只能从文件头开始往文件尾读取,无法指定其他起始位置且无法反向读取。如下例:Const ForReading = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Scripts\Test.txt", ForReading)
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
Loop
objFile.Close
Wscript.Echo strLine AU3可以吗?
我需要在每次程序重新运行时去读取一下log文件,以便从最后一次记录开始继续累加。如果在程序运行过程中日志文件越来越大,读取所耗费的时间也必将越来越长。
此问题如何解决呢?求高手赐教。

水木子 发表于 2010-4-13 12:02:05

这样就倒过来啦!#Include <File.au3>
Local $sText

$Path = @ScriptDir & '\Text.txt'
$Line = _FileCountLines($Path)

For $i = $Line To 1 Step -1
        $sText &= FileReadLine($Path, $i) & @CRLF
Next       

MsgBox(0, '反序读取结果', $sText)

lubb 发表于 2010-4-13 12:18:24

不错,我啦顶。。

xiehuahere 发表于 2010-4-13 19:12:35

回复 2# 水木子

哈哈,高兴。没想到用自定义函数,还不熟练啊。。。谢谢
:face (29):

netegg 发表于 2010-4-13 20:33:13

本帖最后由 netegg 于 2010-4-13 20:38 编辑

再告诉你一个简单的
#include <file.au3>
#Include <Array.au3>
Dim $aRecords
_FileReadToArray($file,$aRecords)
_FilewriteFromArray($temp, _ArrayReverse($aRecords, 1))

pusofalse 发表于 2010-4-13 20:45:59

用连接符号就好了,a &= b,a = b & a

newuser 发表于 2010-4-14 10:06:08

回复 2# 水木子
太好了!

waxy 发表于 2010-4-14 11:30:03

AUTOIT的强人很多哦。

xiehuahere 发表于 2010-4-14 14:11:34

帮助里说,文件很大的时候还是用文件句柄会比用文件名要快一些。
也就是要在每次操作时都及时去open和close啦,否则就存在这样的担心:文件被open了,但程序出现某些问题导致文件未被正常close,这样日志文件就会被破坏。
或许,用脚本定时备份文件比较妥当一些。效率与安全不可兼顾啊

xiaochuan 发表于 2010-4-14 14:37:32

vbs fso对象其实可以从指定位置读且可以反向读取:face (31):

hongewuyan 发表于 2010-4-14 14:51:34

感觉这样效率不高
其实用 tail 或者 sed 命令都可以很好的完成任务。

xiehuahere 发表于 2010-4-14 15:10:54

楼上二位,在下请教了。

menfan 发表于 2010-4-14 20:39:32

其实从任意行开始都行吧

迷龙88 发表于 2012-5-29 09:02:03

谢谢分享。。。。。。。。。

lsqyx528 发表于 2013-1-29 17:35:48

good谢谢!
页: [1]
查看完整版本: TXT日志文件,AU3有没有办法从最后一行开始向前读[已解决]