找回密码
 加入
搜索
查看: 6776|回复: 18

[网络通信] 关于文件TXT读行的一个问题请教!【已解决】

[复制链接]
发表于 2021-3-6 10:23:10 | 显示全部楼层 |阅读模式
本帖最后由 ttmv2019sx 于 2021-3-8 16:40 编辑

有一个文本文件TXT的,内容有
111
222
333
444
555
翻看了帮忙文档,只看到可以用FileReadToArray来逐行从前面一条一条的读取,一直到读完为止,

不知道有没有办法实现,从最后的一条记录开始读取,也就是说从555开始,然后是读一行,删除所读一行,第二次读的时候是444,然后删除所读一行,第三次读的时候是333,读完为止,文本内容为空则退出

成功读取的时候,提示msgbox窗一次,并且在删除行的时候不留空行。


 楼主| 发表于 2021-3-6 10:26:59 | 显示全部楼层
本帖最后由 ttmv2019sx 于 2021-3-6 10:48 编辑

_ArrayPop  好像不能操作文件内容的  A大路过帮忙一下
发表于 2021-3-6 10:53:44 | 显示全部楼层
读入数组反序取值就行,不知删除有何作用?
发表于 2021-3-6 11:13:09 | 显示全部楼层
可能是数据量大,而一次又处理不完,下次处理时避免重复处理
 楼主| 发表于 2021-3-6 13:11:31 | 显示全部楼层
afan 发表于 2021-3-6 10:53
读入数组反序取值就行,不知删除有何作用?

删除的作用是因为,里面有内容的时候,我是 需要进行A操作,等里面的内容都读完了,并删除了,再进行B操作,但是如果不是删除的话,就是不知道,如果中途程序故障了,中断了,哪在读的时候,在哪一个位置中断了,A操作就停止了,,这样想要再继续读文件,不是又要从重头再读一回?
 楼主| 发表于 2021-3-6 13:14:55 | 显示全部楼层
zghwelcome 发表于 2021-3-6 11:13
可能是数据量大,而一次又处理不完,下次处理时避免重复处理

是的,是这个道理,不过不是数据太大,数据行,一般只有300行左右,,不会再多了,,只不过,因为内部平台是后面数据库操作,有的时候,操作的人多了,会出现加载失败类的提示,所以,就希望 是读最后的一行,然后输入,操作,然后删除操作,这样的话,就算是中断程序了,或者是平台故障了,哪也可以知道读到哪一行了,不用去查看,直接继续就行,这样的话,读完了就可以操作别的了,
而如果是从顺行读的话,,就如你说的哪样,中断了,不管是程序故障,还是平台故障,到时候就不知道读到哪一行了,这样的话,就 需要去查看,哪样就不太方便。
 楼主| 发表于 2021-3-6 13:18:12 | 显示全部楼层
afan 发表于 2021-3-6 10:53
读入数组反序取值就行,不知删除有何作用?

是的,顺首来就是反复取,然后显示,输入操作,但是中途不管是程序原因,还是平台原因,中断后,就不知道是在哪一条行的数据,断开了,这样就需要去平台中查看,读到哪里并提交到哪个行了,然后去手动文件中删除已经读过用过的,再继续了,这样就不方便,所以,我现在就是想,读文本行的最后的一行,然后读出来后,输入操作,并且删除这个行,这样循环操作,到时候就算是中断操作了,也不用去查看,而可以直接操作下去,然后,一直读到内容没有,说明,要读出的行数据已经完成,这样就可以去操作B了,就是这个意思   A版,你看有什么好的方法,方便写出来吗,多谢
 楼主| 发表于 2021-3-6 13:21:53 | 显示全部楼层
afan 发表于 2021-3-6 10:53
读入数组反序取值就行,不知删除有何作用?

论坛里,有找到一个类似的例子,不过,哪个只能是读数据,如果是里面有中文字,就会乱读,而且,他的操作是删除最后一行,,在前面第一行插过记录,这个不是我想的效果,所以实在是不太懂,怎么能达到上面的效果,,特立请A大,解答一下,
发表于 2021-3-6 13:29:54 | 显示全部楼层
ttmv2019sx 发表于 2021-3-6 13:21
论坛里,有找到一个类似的例子,不过,哪个只能是读数据,如果是里面有中文字,就会乱读,而且,他的操作 ...
Local $sSource = _
                '111' & @CRLF & _
                '222' & @CRLF & _
                '333' & @CRLF & _
                '444' & @CRLF & _
                '555' & @CRLF & @CRLF
Local $aSRE
While 1
        $aSRE = StringRegExp($sSource, '(?m)^(\V+)\s*\z', 1)
        If @Error Then ExitLoop
        $sSource = StringRegExpReplace($sSource, '(?m)\v*^\V*\s*\z', '')
        MsgBox(0, $aSRE[0], $sSource)
WEnd
MsgBox(0, '', '结束')
发表于 2021-3-6 14:18:53 | 显示全部楼层
ttmv2019sx 发表于 2021-3-6 13:14
是的,是这个道理,不过不是数据太大,数据行,一般只有300行左右,,不会再多了,,只不过,因为内部平 ...

数据量不大的处理方式:
1. IniRead 读取一个ini配置文件获取行号n
2. FileReadLine读取指定的行号n,当n不存在时表示为第一行
3. 操作完成后,IniWrite 写入ini配置文件,更新行号n
 楼主| 发表于 2021-3-6 14:21:54 | 显示全部楼层

A版写的规则,,不是太懂,,还有请问一下,这个文件内的怎么操作,这个过程,和_ArrayPop好像差不多,但是文件操作要怎么写的呢?
发表于 2021-3-6 14:38:48 | 显示全部楼层
ttmv2019sx 发表于 2021-3-6 14:21
A版写的规则,,不是太懂,,还有请问一下,这个文件内的怎么操作,这个过程,和_ArrayPop好像差不多,但 ...

晕 读写文件不是基础中的基础吗…
Local $fTxt = '1.txt'
Local $sSource = FileRead($fTxt)
Local $aSRE, $hFO
While 1
        $aSRE = StringRegExp($sSource, '(?m)^(\V+)\s*\z', 1)
        If @Error Then ExitLoop
        $sSource = StringRegExpReplace($sSource, '(?m)\v*^\V*\s*\z', '')
        MsgBox(0, '最末行', $aSRE[0])
        $hFO = FileOpen($fTxt, 2)
        FileWrite($hFO, $sSource)
        FileClose($hFO)
WEnd
MsgBox(0, '', '结束')
 楼主| 发表于 2021-3-6 14:44:18 | 显示全部楼层

是否需要把当然的内存中的数组结果,显示的位置写入文件,也就是要把所有的文件的行,都读到数组中,然后读出最后的一行,输出到指定的地方,然后再把这个内存中的留下的数组,再写到文件中,这样重复?
 楼主| 发表于 2021-3-6 15:07:47 | 显示全部楼层
afan 发表于 2021-3-6 14:38
晕 读写文件不是基础中的基础吗…

呵呵,批评的好,主要是要用到了一些功能的时候,才想到了学,平时不给机会呀,上班哪叫一个忙呢,而且也是接触 这个时间不是很长,这个学习也是特别的有意思,是半路出来的学习的,谢谢A版
 楼主| 发表于 2021-3-6 15:16:15 | 显示全部楼层
chamlien 发表于 2021-3-6 14:18
数据量不大的处理方式:
1. IniRead 读取一个ini配置文件获取行号n
2. FileReadLine读取指定的行号n, ...

哈,,你又来了呀,谢谢你上次的哪个IE网页点击的回答。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 02:54 , Processed in 0.083424 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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