sky808 发表于 2009-9-22 02:12:36

请问如何在文本中删除指定行

请问有没有相关的函数用来删除已打开的txt文本中的指定行。
麻烦告知,多谢!

afan 发表于 2009-9-22 02:14:50

#Include <File.au3>
_FileWriteToLine($sFile, $iLine, '', 1)

sky808 发表于 2009-9-22 05:07:06

不好意思,都怪我没有表达清楚.
应该是删除一个不规则的ini文件的某一行,前提下我不知道行号,只知道那一行的关键字。

如:


d1,ss2000r.icm
d1,ss2500r.icm
d1,ss2500t.icm
d1,ss3dfo.scr
d1,ssbezier.scr

而我希望删除其中的:
d1,ss3dfo.scr

用了inidelete() 也不行。
多谢指点!!

netegg 发表于 2009-9-22 07:24:17

_filereadtoarray("*.ini",$aArray)
$i = _Arraysearch($aArray, $key, , , ,1)
_arraydelete($aArray, $i)
_FileWriteFromArray("*.ini", $aArray, 1)
写入前要把ini清空

sky808 发表于 2009-9-22 08:37:43

本帖最后由 sky808 于 2009-9-22 08:42 编辑

要命啊,这个文件里成千上万行,里面的内容也很重要.
不能直接删除含关键字行吗?要从新写ini文件就很大工程了。

顽固不化 发表于 2009-9-22 08:55:12

成千上万也得这样,改写文件大都如此

netegg 发表于 2009-9-22 09:04:25

本帖最后由 netegg 于 2009-9-22 09:12 编辑

5# sky808

改成数组已经不错了,要是给你做个无定义循环,你就慢慢查错吧,倒是可以给你个思路,你自己斟酌着用
$i = 1
do
$line =filereadline($file, $i)
if stringinstr($line, $string) <> 0 then
      _filewritetoline($file , $i,"", 1)
endif
$i+=1
until @error
不过先说明下,这样里面是有空行的

afan 发表于 2009-9-22 13:31:50

本帖最后由 afan 于 2009-9-22 13:37 编辑

直接删除含关键字行也可以(注:这里应该不叫关键字了,应该是完整的值,及整行)_filereadtoarray("ini文件.ini",$aArray)
_FileWriteToLine("ini文件.ini", _Arraysearch($aArray, '关键字'), '', 1)如果关键字不止一处加个循环即可。

sky808 发表于 2009-9-22 17:19:50

嗯,多谢楼上的朋友指点!

netegg 发表于 2009-9-22 19:47:07

8# afan
这样不是太好吧,为什么不在array里直接处理,然后索性)filewritefromarray

sxd 发表于 2009-9-23 16:56:07

要么转到数组里处理 要么建2个文件 读一行 判断一行 写一行

netegg 发表于 2009-9-23 19:58:01

11# sxd

我的意思是直接读入数组然后清空文件,在数组里处理完成后,重新写入

sxd 发表于 2009-9-23 20:15:47

12# netegg


嗯啊 是啊

pusofalse 发表于 2009-9-23 23:36:07

使用数组处理,绝对会存在效率问题。可能应用在这个问题中不会显现出来,但如果文本行数到了上百万行,就会很明显了。因为FileWriteFromArray是遍历数组,如果数组有1000万个元素,就要循环1000万次,效率可想而知了。如果没有特殊需求,StringReplace是最简单的。

afan 发表于 2009-9-23 23:53:04

使用数组处理,绝对会存在效率问题。可能应用在这个问题中不会显现出来,但如果文本行数到了上百万行,就会很明显了。因为FileWriteFromArray是遍历数组,如果数组有1000万个元素,就要循环1000万次,效率可想而知了 ...
pusofalse 发表于 2009-9-23 23:36 http://www.autoitx.com/images/common/back.gif

经测试,使用 StringReplace 效率高了N倍~ 多谢指正~!
页: [1] 2
查看完整版本: 请问如何在文本中删除指定行