找回密码
 加入
搜索
查看: 3554|回复: 14

如何判断一个文本文件内是否有指定字符串,如果有则退出,无则添加呢?

[复制链接]
发表于 2008-11-4 15:55:50 | 显示全部楼层 |阅读模式
简单的说这个程序的目的就是查找HOSTS文件内是否包含127.0.0.1 servserv.generals.ea.com 这句,如果有就退出.没有就添加?

另外,127.0.0.1后面有个空格,有的是用TAB来分隔的,还有的是127.0.0.1后面有若干空格的,这3种情况如何处理?

下面是我现在写好的,目前出现了问题,无法读取我打开的文件,结果是不管里面有没有,就直接写在文件末尾了.
好奇怪,为什么无法判断HOSTS文件里面的内容呢?

FileSetAttrib(@SystemDir&"\drivers\etc\hosts","-RSAH") ;害怕有只读属性,所以加了这行.
$File = FileOpen(@SystemDir&"\drivers\etc\hosts",1) 
If $File = -1 Then
    MsgBox(0, "错误:", "无法打开Hosts文件,文件可能不存在。")
EndIf

$Str = ("127.0.0.1 servserv.generals.ea.com")
$String = FileRead($File)

If StringInStr($String, $Str) = 0 Then
    FileWrite($file, "127.0.0.1 servserv.generals.ea.com"& @CRLF)
Else
    Msgbox(0,'','有')
EndIf

FileClose($File)


[ 本帖最后由 KLU3K 于 2008-11-5 08:58 编辑 ]
发表于 2008-11-4 16:41:18 | 显示全部楼层

$String = FileRead($File)
If StringInStr($String, $Str) = 0 Then
    Msgbox(0,'','没有')
Else
    Msgbox(0,'','有')
EndIf
 楼主| 发表于 2008-11-4 17:41:41 | 显示全部楼层
非常感谢楼上的,我看论坛好几天了.初次写东西,对代码基本上都不会.帮助很多都是英文的.实在看不懂.你的帮助我很感激.我先研究一下.有问题再请教.

另外,我看过你帮助过不少会员,深感敬佩啊!顶你!:

研究了一下,结果很糟糕,不明白下面是我写的糟糕代码,能否帮忙看看啊
就是查找HOSTS文件中是否存在127.0.0.1 servserv.generals.ea.com
如果有就关闭文件并且退出,如果没有就加在文件末尾.
我很迷茫.实在不明白.我知道自己写的东西很糟糕,狗屁不通的.希望能帮帮忙.
我回帖没办法插入Au3代码模式,按钮点不下去,没办法请见谅!

FileSetAttrib(@SystemDir&"\drivers\etc\hosts","-RSAH") ;害怕有只读属性,所以加了这行.
$File = FileOpen(@SystemDir&"\drivers\etc\hosts",1) 
If $File = -1 Then
    MsgBox(0, "错误:", "无法打开Hosts文件,文件可能不存在。")
EndIf

$Str = ("127.0.0.1 servserv.generals.ea.com")
$String = FileRead($File)

If StringInStr($String, $Str) = 0 Then
    FileWrite($file, "127.0.0.1 servserv.generals.ea.com"& @CRLF)
Else
    Msgbox(0,'','有')
EndIf

FileClose($File)


[ 本帖最后由 KLU3K 于 2008-11-5 08:42 编辑 ]
发表于 2008-11-4 18:43:04 | 显示全部楼层
$Str = "127.0.0.1 reliclive-1.quazal.net"

   Msgbox("",''","'没有")
   FileWrite($file, "127.0.0.1 servserv.generals.ea.com"& @CRLF)
Else
   Msgbox("",''","'有")
EndIf

[ 本帖最后由 netegg 于 2008-11-4 18:46 编辑 ]
发表于 2008-11-4 18:46:46 | 显示全部楼层
FileSetAttrib(@SystemDir&"\drivers\etc\hosts","-RSAH")这行没用
 楼主| 发表于 2008-11-4 21:17:07 | 显示全部楼层
原帖由 netegg 于 2008-11-4 18:46 发表
FileSetAttrib(@SystemDir&"\drivers\etc\hosts","-RSAH")这行没用


也有用处,我怕有些人把这个文件设置成只读和系统文件,所以加了一行


另外我重新整理了一下,能否帮忙看看这样为什么还有问题呢?

$File = FileOpen(@SystemDir&"\drivers\etc\hosts",1)
If $File = -1 Then
        MsgBox(0, "错误:", "无法打开Hosts文件,文件可能不存在。")
EndIf

$String = FileRead($File)
$FindStr = "127.0.0.1 servserv.generals.ea.com"

If StringInStr($String,$FindStr) =0 Then
        FileWrite($File, "127.0.0.1 servserv.generals.ea.com"& @CRLF)
Else
        Msgbox(0,"","已找到")
EndIf
FileClose($File)


[ 本帖最后由 KLU3K 于 2008-11-5 08:05 编辑 ]
发表于 2008-11-4 22:39:34 | 显示全部楼层
你上面的代码已经可以正常写入了
 楼主| 发表于 2008-11-5 07:39:29 | 显示全部楼层
原帖由 liongodmien 于 2008-11-4 22:39 发表
你上面的代码已经可以正常写入了


目前的情况出现了问题,没办法正确读取出我已存在的字串.直接就写上去了,打开HOSTS文件一看,重复了.!
比如我现在的HOSTS文件包含了下面的内容
=========HOSTS文件内容开始========
127.0.0.1 localhost
127.0.0.1 servserv.generals.ea.com
=========HOSTS文件内容结束========
然后我运行下面的代码:

$File = FileOpen(@SystemDir&"\drivers\etc\hosts",1)  ;会不会这里出现问题了呢?我试过这里改为2,那样就全覆盖了.
If $File = -1 Then
    MsgBox(0, "错误:", "无法打开Hosts文件,文件可能不存在。")
EndIf
 
$String = FileRead($File) ;我感觉这里有问题,好像根本没读取什么内容
$FindStr = "127.0.0.1 servserv.generals.ea.com"
 
If StringInStr($String,$FindStr) =0 Then
    FileWrite($file, @CRLF&"127.0.0.1 servserv.generals.ea.com") ;这里是正确的,可以写入!
Else
    Msgbox(0,"","已找到") ;已经重复了,为什么没出现这里的提示呢?
EndIf
FileClose($File)


结果打开HOSTS文件是下面的内容:
=========HOSTS文件内容开始========
127.0.0.1 localhost
127.0.0.1 servserv.generals.ea.com
127.0.0.1 servserv.generals.ea.com
=========HOSTS文件内容结束========
怎么办?

[ 本帖最后由 KLU3K 于 2008-11-5 08:19 编辑 ]
发表于 2008-11-5 08:32:35 | 显示全部楼层

$file = @SystemDir&"\drivers\etc\hosts"

$String = FileRead($file) ;我感觉这里有问题,好像根本没读取什么内容
If @error <> 0 Then
    MsgBox(0, "错误:", "无法打开Hosts文件,文件可能不存在。")
        Exit
EndIf
 
$FindStr = "127.0.0.1 servserv.generals.ea.com"
 
If StringInStr($String,$FindStr) =0 Then
    FileWrite($file, @CRLF&"127.0.0.1 servserv.generals.ea.com") ;这里是正确的,可以写入!
Else
    Msgbox(0,"","已找到") ;已经重复了,为什么没出现这里的提示呢?
EndIf
FileClose($File)
发表于 2008-11-5 08:34:10 | 显示全部楼层
FileOpen() 用了参数,,并且参数没用好
发表于 2008-11-5 08:35:03 | 显示全部楼层
注意

A file can only be in either read or write mode; it cannot be in both.
When opening a file in write mode, the file will be created if it does not exist.
When finished working with a file, call the FileClose function to close the file. Autoit normally closes all files upon termination, but explicitly calling FileClose is still a good idea.
 楼主| 发表于 2008-11-5 08:58:26 | 显示全部楼层
非常感谢楼上的热心兄弟.问题彻底解决.哎~都是看不懂英文闹的.如果帮助文件能彻底汉化,我想还会吸引很多初学者学习的.总之非常感谢各位帮助我的朋友们!谢谢你们!
发表于 2008-11-5 09:15:10 | 显示全部楼层
找个地方下个老版本的,有中文帮助,别在论坛下载了,中文帮助已经删了,新的还没放出来
发表于 2008-11-5 09:37:03 | 显示全部楼层
原帖由 KLU3K 于 2008-11-5 08:58 发表
非常感谢楼上的热心兄弟.问题彻底解决.哎~都是看不懂英文闹的.如果帮助文件能彻底汉化,我想还会吸引很多初学者学习的.总之非常感谢各位帮助我的朋友们!谢谢你们!

感觉是看了一次中文后,再看英文的也好...

在汉化版本下载页面里有一个非本论坛汉化的帮助,可以借鉴,不过由于时隔太久,有好多不适用的!在中文资料那也有一个兄弟整理上传的中文帮助(部分)
 楼主| 发表于 2008-11-5 10:37:42 | 显示全部楼层
原帖由 liongodmien 于 2008-11-5 09:37 发表

感觉是看了一次中文后,再看英文的也好...

在汉化版本下载页面里有一个非本论坛汉化的帮助,可以借鉴,不过由于时隔太久,有好多不适用的!在中文资料那也有一个兄弟整理上传的中文帮助(部分)


感谢指点,我这就去下载一份学习!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-2 18:27 , Processed in 0.077409 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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