关于文件TXT读行的一个问题请教!【已解决】
本帖最后由 ttmv2019sx 于 2021-3-8 16:40 编辑有一个文本文件TXT的,内容有
111
222
333
444
555
翻看了帮忙文档,只看到可以用FileReadToArray来逐行从前面一条一条的读取,一直到读完为止,
不知道有没有办法实现,从最后的一条记录开始读取,也就是说从555开始,然后是读一行,删除所读一行,第二次读的时候是444,然后删除所读一行,第三次读的时候是333,读完为止,文本内容为空则退出
成功读取的时候,提示msgbox窗一次,并且在删除行的时候不留空行。
本帖最后由 ttmv2019sx 于 2021-3-6 10:48 编辑
_ArrayPop好像不能操作文件内容的A大路过帮忙一下 读入数组反序取值就行,不知删除有何作用? 可能是数据量大,而一次又处理不完,下次处理时避免重复处理 afan 发表于 2021-3-6 10:53
读入数组反序取值就行,不知删除有何作用?
删除的作用是因为,里面有内容的时候,我是 需要进行A操作,等里面的内容都读完了,并删除了,再进行B操作,但是如果不是删除的话,就是不知道,如果中途程序故障了,中断了,哪在读的时候,在哪一个位置中断了,A操作就停止了,,这样想要再继续读文件,不是又要从重头再读一回? zghwelcome 发表于 2021-3-6 11:13
可能是数据量大,而一次又处理不完,下次处理时避免重复处理
是的,是这个道理,不过不是数据太大,数据行,一般只有300行左右,,不会再多了,,只不过,因为内部平台是后面数据库操作,有的时候,操作的人多了,会出现加载失败类的提示,所以,就希望 是读最后的一行,然后输入,操作,然后删除操作,这样的话,就算是中断程序了,或者是平台故障了,哪也可以知道读到哪一行了,不用去查看,直接继续就行,这样的话,读完了就可以操作别的了,
而如果是从顺行读的话,,就如你说的哪样,中断了,不管是程序故障,还是平台故障,到时候就不知道读到哪一行了,这样的话,就 需要去查看,哪样就不太方便。 afan 发表于 2021-3-6 10:53
读入数组反序取值就行,不知删除有何作用?
是的,顺首来就是反复取,然后显示,输入操作,但是中途不管是程序原因,还是平台原因,中断后,就不知道是在哪一条行的数据,断开了,这样就需要去平台中查看,读到哪里并提交到哪个行了,然后去手动文件中删除已经读过用过的,再继续了,这样就不方便,所以,我现在就是想,读文本行的最后的一行,然后读出来后,输入操作,并且删除这个行,这样循环操作,到时候就算是中断操作了,也不用去查看,而可以直接操作下去,然后,一直读到内容没有,说明,要读出的行数据已经完成,这样就可以去操作B了,就是这个意思 A版,你看有什么好的方法,方便写出来吗,多谢 afan 发表于 2021-3-6 10:53
读入数组反序取值就行,不知删除有何作用?
论坛里,有找到一个类似的例子,不过,哪个只能是读数据,如果是里面有中文字,就会乱读,而且,他的操作是删除最后一行,,在前面第一行插过记录,这个不是我想的效果,所以实在是不太懂,怎么能达到上面的效果,,特立请A大,解答一下, 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, $sSource)
WEnd
MsgBox(0, '', '结束') ttmv2019sx 发表于 2021-3-6 13:14
是的,是这个道理,不过不是数据太大,数据行,一般只有300行左右,,不会再多了,,只不过,因为内部平 ...
数据量不大的处理方式:
1. IniRead 读取一个ini配置文件获取行号n
2. FileReadLine读取指定的行号n,当n不存在时表示为第一行
3. 操作完成后,IniWrite 写入ini配置文件,更新行号n afan 发表于 2021-3-6 13:29
A版写的规则,,不是太懂,,还有请问一下,这个文件内的怎么操作,这个过程,和_ArrayPop好像差不多,但是文件操作要怎么写的呢? 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)
$hFO = FileOpen($fTxt, 2)
FileWrite($hFO, $sSource)
FileClose($hFO)
WEnd
MsgBox(0, '', '结束') afan 发表于 2021-3-6 13:29
是否需要把当然的内存中的数组结果,显示的位置写入文件,也就是要把所有的文件的行,都读到数组中,然后读出最后的一行,输出到指定的地方,然后再把这个内存中的留下的数组,再写到文件中,这样重复? afan 发表于 2021-3-6 14:38
晕 读写文件不是基础中的基础吗…
呵呵,批评的好,主要是要用到了一些功能的时候,才想到了学,平时不给机会呀,上班哪叫一个忙呢,而且也是接触 这个时间不是很长,这个学习也是特别的有意思,是半路出来的学习的,谢谢A版 chamlien 发表于 2021-3-6 14:18
数据量不大的处理方式:
1. IniRead 读取一个ini配置文件获取行号n
2. FileReadLine读取指定的行号n, ...
哈,,你又来了呀,谢谢你上次的哪个IE网页点击的回答。
页:
[1]
2