找回密码
 加入
搜索
查看: 9366|回复: 16

[AU3基础] [已解决]如何获取一个文本文档最新写入的某些内容?

 火.. [复制链接]
发表于 2013-2-2 13:28:20 | 显示全部楼层 |阅读模式
本帖最后由 fybhwsx 于 2013-2-4 22:33 编辑

20130201T090213 send order: 8170709 RM309 卖平 1 2320.00 [A_SendOrder] [OrderRef=2]
20130201T092409 send order: 8170709 cu1305 卖平 1 55980.00 [A_SendOrder] [OrderRef=3]
20130201T103029 send order: 8170709 CF309 卖平 1 19500.00 [A_SendOrder] [OrderRef=4]
20130201T103243 send order: 8170709 zn1305 卖平 1 15115.00 [A_SendOrder] [OrderRef=5]
20130201T134200 send order: 8170709 cu1305 买开 1 59490.00 [交易师] [OrderRef=2]
20130201T140117 send order: 8170709 cu1305 卖平 1 55980.00 [A_SendOrder] [OrderRef=3]
20130201T143905 send order: 8170709 zn1305 买开 1 17040.00 [A_SendOrder] [OrderRef=4]
20130201T144323 send order: 8170709 zn1305 卖平 1 16085.00 [帐户管理 - 快速平仓] [OrderRef=5]
20130201T144825 send order: 8170709 zn1305 卖平 1 15115.00 [A_SendOrder] [OrderRef=6]

以上是一款期货交易软件的交易存档,我想获取这个文本文档最新一次写入内容中的“商品代码 买卖开平 手数”,并以此为标题发送邮件或短信,哪位老师能帮忙解决一下,谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2013-2-2 13:42:59 | 显示全部楼层
Global $zdjywbwd = "D:\TradeBlazerV4\ctporder" & @YEAR & @MON & @MDAY & "_8090_8170709.txt"
Global $iSize2 = 0

While 1
        Global $iSize = FileGetSize($zdjywbwd)
        If $iSize <> $iSize2 Then
                $iSize2 = $iSize
                $Subject =  FileRead($zdjywbwd); 邮件的主题
                _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
        EndIf
WEnd
这是我现在用的代码,用监控这个文本文档的大小来判断是否有新内容,但这样发送是文本中的所有内容。
发表于 2013-2-2 14:09:24 | 显示全部楼层
如果新写入的都是追加到文件末尾的话,可以用你的方法,就是比较大小来判断,或者读取文件行数多少
比如,原来的文件是有7行,一段时间后,读到文件有9行,那么很明显,新写入了2行,然后你直接对文件读行就可以了,从第8行开始
发表于 2013-2-2 14:46:31 | 显示全部楼层
使用文件指针是方法快速有效方法
发表于 2013-2-2 14:57:37 | 显示全部楼层
本帖最后由 netegg 于 2013-2-2 14:58 编辑

lz的原始数据和追加数据在一个文件中且没有原文件记录吗?换句话说,用来对比的原始数据在什么地方?
 楼主| 发表于 2013-2-2 16:50:37 | 显示全部楼层
本帖最后由 fybhwsx 于 2013-2-2 16:56 编辑
lz的原始数据和追加数据在一个文件中且没有原文件记录吗?换句话说,用来对比的原始数据在什么地方?
netegg 发表于 2013-2-2 14:57


没有原始文件,这个文件是交易记录,就是每有一笔交易,文本就会增加一行。如果当天没有交易,这个文本就不会出现。我现在就想获取最新(后)一行中如图中红框中的内容,我也搜到有什么“正则”表达式,可能会很容易解决这个问题。
发表于 2013-2-2 16:55:58 | 显示全部楼层
_filereadtoarray()
_arraysort(,1)
redim $aArray[2]
_arraysort()
_arraydisplay
 楼主| 发表于 2013-2-3 18:54:07 | 显示全部楼层
本帖最后由 fybhwsx 于 2013-2-3 18:55 编辑
_filereadtoarray()
_arraysort(,1)
redim $aArray[2]
_arraysort()
_arraydisplay
netegg 发表于 2013-2-2 16:55


  谢谢老师,我水平实在有限,弄不明白。我上传这个文档,麻烦看看能不能直接给成代码,获取一楼图中红框的字符。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2013-2-3 19:40:45 | 显示全部楼层
具体字符怎么处理用个正则就行了,下面这段只是先挑出那两行罢了
#include<array.au3>
#include<file.au3>
Dim $aA[_FileCountLines('1.txt') + 1]
_FileReadToArray('1.txt', $aA)
_ArrayDisplay($aA)
_ArrayReverse($aA)
ReDim $aA[2]
;_ArrayReverse($aA)
_ArrayDisplay($aA)
发表于 2013-2-3 20:55:49 | 显示全部楼层
回复 3# annybaby

如果不是在末尾添加的方式,可以使用文件的更改时间是否变化先判断后,在读取文件内容。
发表于 2013-2-4 02:01:51 | 显示全部楼层
回复 11# hammer_pan
多虑了,看前面第一部分是按时序添加的
 楼主| 发表于 2013-2-4 08:22:34 | 显示全部楼层
具体字符怎么处理用个正则就行了,下面这段只是先挑出那两行罢了
netegg 发表于 2013-2-3 19:40



    谢谢老师热心帮助,是我表达错了,红框圈了两行,意思是想用正则表达式只取每行红框中圈定的内容。所以烦请老师给出正则表达式才是关键所在。不过还是学到不少东西,可以检测文本行数来监控这个文本的最新内容,
改进了一些代码,使其更符合自己要求了。
发表于 2013-2-4 11:00:45 | 显示全部楼层
既然前面的字符长度都是定死的,那么就用最笨的方法“数字符”咯
发表于 2013-2-4 11:13:51 | 显示全部楼层
回复 13# fybhwsx


    send order: \d+ (.+) \d+
发表于 2013-2-4 13:21:48 | 显示全部楼层
本帖最后由 shqf 于 2013-2-4 13:23 编辑
#include <Array.au3>
Global $zdjywbwd = "D:\TradeBlazerV4\ctporder" & @YEAR & @MON & @MDAY & "_8090_8170709.txt"
$Text = FileRead($zdjywbwd)
While 1
        Global $nText = FileRead($zdjywbwd)
        If $Text <> $nText Then
                $var = StringReplace($nText, $Text, "")
                $array = StringRegExp($var, "8170709 (.+) \d+\.", 3)        
                $Subject =$array[0]        
                _INetSmtpMailCom($SmtpServer, $FromName, $FromAddress, $ToAddress, $Subject, $Body, $AttachFiles, $CcAddress, $BccAddress, $Importance, $Username, $Password, $IPPort, $ssl)
                $Text = $nText
        EndIf
WEnd
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-29 11:27 , Processed in 0.083604 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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