找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 4892|回复: 1

老马进来看看,谢谢.

[复制链接]

3

主题

2

回帖

0

精华

铜牌会员

积分
177
发表于 2009-7-16 08:53:04 | 显示全部楼层 |阅读模式
<p><font face="Verdana">大家看看,两个从ini取信息的函数,哪个好呀? <br/>以下两个函数都是网上找的,第一个说不好来处,第二个是老马的代码(从他的论坛下的) </font></p>
<p><font face="Verdana">我想问问哪种更好些,第一种代码少,简洁很多, <br/>第二个代码,代码量大,主要是因为多了一个循环截尾的操作。因为我现在用的是第一种代码,可是看到很多网友都在用第二种代码,我不知道为什么,为何在用循环呢? <br/>是不是第一种操作的字符截尾操作有问题呀? </font></p>
<p><font face="Verdana">VB code</font></p>
<p><font face="Verdana">Public Function GetIniKey(strSection As String, strKey As String) As String<br/>&nbsp;&nbsp;&nbsp; On Error GoTo errhandle<br/>&nbsp;&nbsp;&nbsp; Dim strResult&nbsp; As String * 255&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '固定255长度<br/>&nbsp;&nbsp;&nbsp; Dim lngRet&nbsp; As Long<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; lngRet = GetPrivateProfileString(strSection, strKey, "", strResult, Len(strResult), strINI)<br/>&nbsp;&nbsp;&nbsp; GetIniKey = Left(strResult, InStr(strResult, Chr(0)) - 1)</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; Exit Function<br/>errhandle:<br/>&nbsp;&nbsp;&nbsp; GetIniKey = ""<br/>End Function</font></p>
<p><font face="Verdana">Function GetIniS(ByVal SectionName As String, ByVal KeyWord As String, ByVal DefString As String) As String<br/>&nbsp;&nbsp;&nbsp; Dim ResultString As String * 144, Temp As Integer<br/>&nbsp;&nbsp;&nbsp; Dim S As String, I As Integer</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; Temp% = GetPrivateProfileString(SectionName, KeyWord, "", ResultString, 144, IniFileName)</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; If Temp% &gt; 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S = ""<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; For I = 1 To 144<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If Asc(Mid$(ResultString, I, 1)) = 0 Then<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit For<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S = S &amp; Mid$(ResultString, I, 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Next<br/>&nbsp;&nbsp;&nbsp; Else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Temp% = WritePrivateProfileString(SectionName, KeyWord, DefString, IniFileName)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S = DefString<br/>&nbsp;&nbsp;&nbsp; End If<br/>&nbsp;&nbsp;&nbsp; GetIniS = S<br/>End Function<br/></font></p>

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2009-7-16 23:04:27 | 显示全部楼层
<p>其实两种代码一般应用应该都是差不多的,而上面一种代码要少些,更简明.</p>
<p>&nbsp;</p>
<p>至于执行的效率,其实INI读写量一般不会太大,所以不容易出现效率问题.</p>
<p>&nbsp;</p>
<p>对于两种代码的写法谁好,我觉得都一样,INSTR函数本质上也是一个循环,只是VB封装了而已</p>
<p>&nbsp;</p>
<p>两种代码的问题,都是同一个问题,即不能正常返回中间带有NULL符的字符串.</p>
<p>&nbsp;</p>
<p>这样的字符串的典型应用是通用对话框进行多选时返回的文件列表,就是以NULL为分隔的,如果使用上面两种代码来返回,就会出现截断.</p>
<p>&nbsp;</p>
<p>要正常返回此类型的字符串,我的做法是,先以NULL为分隔符使用SPLIT进行拆分,再在提取各个字符串时将非空的数组成员视为有效返回内容.</p>
<p>&nbsp;</p>
<p>不过一般没人在注册表里放这样的字符串(我也不清楚系统是否有这样的字符串),所以也不用管了吧</p>
[此贴子已经被作者于2009-7-16 23:06:20编辑过]
我就是嗷嗷叫的老马了......

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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