solox 发表于 2012-12-21 13:02:30

[已解决]怎样在文本文件的第一行写入或删除某一行?

本帖最后由 solox 于 2012-12-23 10:53 编辑

hi,我编写了一个AU3脚本,并准备用一个文件来记录脚本运行的日期,运行一次则写入一行当天的日期,如果当天的日期已经在文件中则不写入,如
2012-12-08
2012-12-09
2012-12-12
2012-12-13
2012-12-14

但是我只想保存最近5次(5行),如何删除第一行?比如我12月15日又运行了一次,如何实现写入2012-12-15,并删除2012-12-08?

或者用倒序记录,那么如何实现在第一行写入,并删除最后一行?

netegg 发表于 2012-12-21 16:13:53

_filereadtoarray
_arraypush
fileopen
_filewritefromarray
fileclose

lxzan 发表于 2012-12-21 17:24:57

学 习 了 .

user3000 发表于 2012-12-21 20:56:18

回复 1# solox

日志一般都是用倒序的, 方便查看最新的信息.
只用内置函数, 其实难点在于删除信息吧. 以下是用正则删除的.
$file = 'rec.txt'
If Not FileExists($file) Then FileWrite($file, '')
$date = @YEAR & '-' & @MON & '-' & @MDAY
$data = FileRead($file)
If Not StringInStr($data, $date) Then
        $data =$date & @CRLF & StringRegExpReplace($data, '.+$', '')
        FileOpen($file, 2)
        FileWrite($file, $data)
        FileClose($file)
EndIf

netegg 发表于 2012-12-21 23:35:06

本帖最后由 netegg 于 2012-12-21 23:51 编辑

日志一般都是用倒序的?倒序倒是方便了,还用替换干什么
$hFile =fileopen($file)
FileSetPos($hFile, stringinstr($file, @cr,0,-1 ), $FILE_BEGIN)
filewrite($file, $line &@crlf & fileread($hFile))

netegg 发表于 2012-12-22 02:44:59

本帖最后由 netegg 于 2012-12-22 03:02 编辑

#include <Constants.au3>
Local Const $aFile = "test.txt"
Local $hFile = FileOpen($aFile, 1)
FileFlush($hFile)
FileSetPos($hFile, 0, $file_begin)
FileSetPos($hFile, StringInStr(FileRead($aFile), Chr(13), 0, -1), $file_current)
$last = FileRead($aFile,Filegetpos($hFile))
FileOpen($aFile, 2)
FileWrite($aFile, $line & @CRLF & $last)
FileClose($hFile)

有一点要注意,最后一行后面不能再有回车,否则那个-1不对
还有点问题,如果是@crlf结尾删不掉,再想想吧

netegg 发表于 2012-12-22 19:20:59

本帖最后由 netegg 于 2012-12-23 10:47 编辑

#include <Constants.au3>
Local Const $aFile = "test.txt"
Local $line = '12345'
Local $hFile = FileOpen($aFile, 1)
FileFlush($hFile)
FileSetPos($hFile, 0, $file_begin)
FileSetPos($hFile, StringInStr(stringstripws(FileRead($aFile), 2), Chr(13), 0, -1), $file_current)
$last = FileRead($aFile,Filegetpos($hFile))
FileOpen($aFile, 2)
FileWrite($aFile, $line & @CRLF & $last)
FileClose($hFile)
搞定,删除最后一行,添加第一行

solox 发表于 2012-12-23 10:47:22

只想大家提供个思路的,没想到解答得那么详细,太有爱了,非常感谢{:face (377):}

javarike 发表于 2012-12-29 00:42:59

{:face (382):}学习了

ainizm 发表于 2013-5-29 23:20:00

踩个脚印。。。。。。。。。。

ainizm 发表于 2013-5-29 23:20:04

踩个脚印。。。。。。。。。。

holley 发表于 2015-1-25 18:47:46

egg的回答很详细,刚好可以借鉴到我的工作上,之前是bat写的,有些繁琐
页: [1]
查看完整版本: [已解决]怎样在文本文件的第一行写入或删除某一行?