basc 发表于 2013-2-13 12:37:02

如何读取读取TXT文本的最后一行

本帖最后由 basc 于 2013-2-13 12:39 编辑

要写个FTP备份文件的,需要将最新的文件上传到FTP,现在的想法是想先DIR一下写入TXT,然后读取读取TXT文本的最后一行,并上传FTP

netegg 发表于 2013-2-13 13:42:03

FileReadLine

basc 发表于 2013-2-13 20:53:23

回复 2# netegg


    我也明白用这个命令,但是我不知道怎么让它只读取最后一行
Local $file = FileOpen("test.txt", 0)

; 检查打开的文件是否可读
If $file = -1 Then
    MsgBox(4096, "错误", "不能打开文件.")
    Exit
EndIf

; 每次读取一行文本,直到文件结束.
While 1
    Local $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    MsgBox(4096, "读取的行:", $line)
WEnd

FileClose($file)
帮助中的范例,是读取全部的行

happytc 发表于 2013-2-13 22:45:45

本帖最后由 happytc 于 2013-2-13 22:48 编辑


$sContent = FileRead('1.txt')
$aResult = StringRegExp($sContent, '(?s)(?:^.*)(?:\r\n|\r|\n)(.*$)', 1)
MsgBox(0, 'Last line', $aResult)

netegg 发表于 2013-2-13 23:59:42

仔细看帮助,如果第二个参数是-1呢

netegg 发表于 2013-2-14 00:01:04

当然,如果是要求的话,可能要处理下文本尾部的空行

shqf 发表于 2013-2-14 13:38:37

楼主,你把“MsgBox(4096, "读取的行:", $line)”这一句放到程序最后,显示的$line的值就是最后一行的内容。

basc 发表于 2013-2-14 22:00:23

回复 4# happytc


    (?s)(?:^.*)(?:\r\n|\r|\n)(.*$)
什么意思啊

sango 发表于 2013-2-14 23:23:28

正则很强大,看不懂啊。

jtzxgfy 发表于 2013-2-15 08:16:03


happytc 发表于 2013-2-13 22:45 http://www.autoitx.com/images/common/back.gif


$sContent = FileRead('1.txt')


$aResult = StringRegExp($sContent, '(.*$)', 1)


MsgBox(0, 'Last line', $aResult)


正则 直接用(.*$) 不就行了? 我试了能行 
(.*$)  '.' : 除新行(newline)外的任一字符,'*' : 0或任意次,'$' : 行尾(或结尾处新行之前字符)

happytc 发表于 2013-2-15 09:33:35

$sContent = FileRead('1.txt')


$aResult = StringRegExp($sContent, '(.*$)', 1)


MsgBox( ...
jtzxgfy 发表于 2013-2-15 08:16 http://www.autoitx.com/images/common/back.gif

可是可以,就是效率低了点
若是1.txt是个较大的文本,如50M,你知道正则引擎会在/.*$/上‘位移’和‘回溯’多少次吗?
虽然现在的引擎算法不断地优化以便于处理用户这种‘傻瓜式’表达式,但还是会时不时陷入指数级迭代的陷阱的,不能完全指望引擎帮你解决效率问题。

whitehead 发表于 2013-2-15 10:40:05

本帖最后由 whitehead 于 2013-2-15 10:42 编辑

回复 10# jtzxgfy
读取的是TXT文本的最后非空行或倒数第二个空白行

whitehead 发表于 2013-2-15 11:07:34

回复 4# happytc
对只有一行的文本,您的源码取不出最后一行,提示非数组

whitehead 发表于 2013-2-15 11:09:18

回复 11# happytc

原来是效率问题,谢谢

happytc 发表于 2013-2-15 12:36:43

回复happytc
对只有一行的文本,您的源码取不出最后一行,提示非数组
whitehead 发表于 2013-2-15 11:07 http://www.autoitx.com/images/common/back.gif

所以,写正则是,了解文本的组成很重要,免得被一些边界条件所困

$sContent = FileRead('1.txt')
$aResult = StringRegExp($sContent, '(?s)(?:^.*)(?:\r\n|\r|\n)(.*$)|(?-s)^.*$', 1)
MsgBox(0, 'Last line', $aResult)
页: [1] 2
查看完整版本: 如何读取读取TXT文本的最后一行