如何读取读取TXT文本的最后一行
本帖最后由 basc 于 2013-2-13 12:39 编辑要写个FTP备份文件的,需要将最新的文件上传到FTP,现在的想法是想先DIR一下写入TXT,然后读取读取TXT文本的最后一行,并上传FTP FileReadLine 回复 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:48 编辑
$sContent = FileRead('1.txt')
$aResult = StringRegExp($sContent, '(?s)(?:^.*)(?:\r\n|\r|\n)(.*$)', 1)
MsgBox(0, 'Last line', $aResult)
仔细看帮助,如果第二个参数是-1呢 当然,如果是要求的话,可能要处理下文本尾部的空行 楼主,你把“MsgBox(4096, "读取的行:", $line)”这一句放到程序最后,显示的$line的值就是最后一行的内容。 回复 4# happytc
(?s)(?:^.*)(?:\r\n|\r|\n)(.*$)
什么意思啊 正则很强大,看不懂啊。
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或任意次,'$' : 行尾(或结尾处新行之前字符) $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:42 编辑
回复 10# jtzxgfy
读取的是TXT文本的最后非空行或倒数第二个空白行 回复 4# happytc
对只有一行的文本,您的源码取不出最后一行,提示非数组 回复 11# happytc
原来是效率问题,谢谢 回复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