找回密码
 加入
搜索
查看: 14699|回复: 26

[系统综合] 如何读取读取TXT文本的最后一行

 火.. [复制链接]
发表于 2013-2-13 12:37:02 | 显示全部楼层 |阅读模式
本帖最后由 basc 于 2013-2-13 12:39 编辑

要写个FTP备份文件的,需要将最新的文件上传到FTP,现在的想法是想先DIR一下写入TXT,然后读取读取TXT文本的最后一行,并上传FTP
发表于 2013-2-13 13:42:03 | 显示全部楼层
FileReadLine
 楼主| 发表于 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)
帮助中的范例,是读取全部的行
发表于 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[0])
发表于 2013-2-13 23:59:42 | 显示全部楼层
仔细看帮助,如果第二个参数是-1呢
发表于 2013-2-14 00:01:04 | 显示全部楼层
当然,如果是要求的话,可能要处理下文本尾部的空行
发表于 2013-2-14 13:38:37 | 显示全部楼层
楼主,你把“MsgBox(4096, "读取的行:", $line)”这一句放到程序最后,显示的$line的值就是最后一行的内容。
 楼主| 发表于 2013-2-14 22:00:23 | 显示全部楼层
回复 4# happytc


    (?s)(?:^.*)(?:\r\n|\r|\n)(.*$)
什么意思啊
发表于 2013-2-14 23:23:28 | 显示全部楼层
正则很强大,看不懂啊。
发表于 2013-2-15 08:16:03 | 显示全部楼层
happytc 发表于 2013-2-13 22:45



$sContent = FileRead('1.txt')


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


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


正则 直接用(.*$) 不就行了? 我试了能行 
(.*$)  '.' : 除新行(newline)外的任一字符,'*' : 0或任意次,'$' : 行尾(或结尾处新行之前字符)
发表于 2013-2-15 09:33:35 | 显示全部楼层
$sContent = FileRead('1.txt')


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


MsgBox( ...
jtzxgfy 发表于 2013-2-15 08:16


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

回复 10# jtzxgfy
读取的是TXT文本的最后非空行或倒数第二个空白行
发表于 2013-2-15 11:07:34 | 显示全部楼层
回复 4# happytc
对只有一行的文本,您的源码取不出最后一行,提示非数组
发表于 2013-2-15 11:09:18 | 显示全部楼层
回复 11# happytc

原来是效率问题,谢谢
发表于 2013-2-15 12:36:43 | 显示全部楼层
回复  happytc
对只有一行的文本,您的源码取不出最后一行,提示非数组
whitehead 发表于 2013-2-15 11:07


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

$sContent = FileRead('1.txt')
$aResult = StringRegExp($sContent, '(?s)(?:^.*)(?:\r\n|\r|\n)(.*$)|(?-s)^.*$', 1)
MsgBox(0, 'Last line', $aResult[0])
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-18 13:44 , Processed in 0.093708 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表