找回密码
 加入
搜索
查看: 8919|回复: 24

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

[复制链接]
发表于 2009-9-22 02:12:36 | 显示全部楼层 |阅读模式
请问有没有相关的函数用来删除已打开的txt文本中的指定行。
麻烦告知,多谢!
发表于 2009-9-22 02:14:50 | 显示全部楼层
#Include <File.au3>
_FileWriteToLine($sFile, $iLine, '', 1)
 楼主| 发表于 2009-9-22 05:07:06 | 显示全部楼层
不好意思,都怪我没有表达清楚.
应该是删除一个不规则的ini文件的某一行,前提下我不知道行号,只知道那一行的关键字。

如:

[Files]
d1,ss2000r.icm
d1,ss2500r.icm
d1,ss2500t.icm
d1,ss3dfo.scr
d1,ssbezier.scr

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

用了inidelete() 也不行。
多谢指点!!
发表于 2009-9-22 07:24:17 | 显示全部楼层
_filereadtoarray("*.ini",$aArray)
$i = _Arraysearch($aArray, $key, , , ,1)
_arraydelete($aArray, $i)
_FileWriteFromArray("*.ini", $aArray, 1)
写入前要把ini清空
 楼主| 发表于 2009-9-22 08:37:43 | 显示全部楼层
本帖最后由 sky808 于 2009-9-22 08:42 编辑

要命啊,这个文件里成千上万行,里面的内容也很重要.
不能直接删除含关键字行吗?要从新写ini文件就很大工程了。
发表于 2009-9-22 08:55:12 | 显示全部楼层
成千上万也得这样,改写文件大都如此
发表于 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
不过先说明下,这样里面是有空行的
发表于 2009-9-22 13:31:50 | 显示全部楼层
本帖最后由 afan 于 2009-9-22 13:37 编辑

直接删除含关键字行也可以(注:这里应该不叫关键字了,应该是完整的值,及整行)
_filereadtoarray("ini文件.ini",$aArray)
_FileWriteToLine("ini文件.ini", _Arraysearch($aArray, '关键字'), '', 1)
如果关键字不止一处加个循环即可。
 楼主| 发表于 2009-9-22 17:19:50 | 显示全部楼层
嗯,多谢楼上的朋友指点!
发表于 2009-9-22 19:47:07 | 显示全部楼层
8# afan
这样不是太好吧,为什么不在array里直接处理,然后索性)filewritefromarray
发表于 2009-9-23 16:56:07 | 显示全部楼层
要么转到数组里处理 要么建2个文件 读一行 判断一行 写一行
发表于 2009-9-23 19:58:01 | 显示全部楼层
11# sxd

我的意思是直接读入数组然后清空文件,在数组里处理完成后,重新写入
发表于 2009-9-23 20:15:47 | 显示全部楼层
12# netegg


嗯啊 是啊
发表于 2009-9-23 23:36:07 | 显示全部楼层
使用数组处理,绝对会存在效率问题。可能应用在这个问题中不会显现出来,但如果文本行数到了上百万行,就会很明显了。因为FileWriteFromArray是遍历数组,如果数组有1000万个元素,就要循环1000万次,效率可想而知了。如果没有特殊需求,StringReplace是最简单的。

评分

参与人数 1金钱 +20 贡献 +10 收起 理由
afan + 20 + 10

查看全部评分

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


经测试,使用 StringReplace 效率高了N倍~ 多谢指正~!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-22 01:15 , Processed in 0.086441 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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