老马进来看看,谢谢.
<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/> On Error GoTo errhandle<br/> Dim strResult As String * 255 '固定255长度<br/> Dim lngRet As Long<br/> <br/> lngRet = GetPrivateProfileString(strSection, strKey, "", strResult, Len(strResult), strINI)<br/> GetIniKey = Left(strResult, InStr(strResult, Chr(0)) - 1)</font></p>
<p><font face="Verdana"> Exit Function<br/>errhandle:<br/> 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/> Dim ResultString As String * 144, Temp As Integer<br/> Dim S As String, I As Integer</font></p>
<p><font face="Verdana"> Temp% = GetPrivateProfileString(SectionName, KeyWord, "", ResultString, 144, IniFileName)</font></p>
<p><font face="Verdana"> If Temp% > 0 Then<br/> S = ""<br/> For I = 1 To 144<br/> If Asc(Mid$(ResultString, I, 1)) = 0 Then<br/> Exit For<br/> Else<br/> S = S & Mid$(ResultString, I, 1)<br/> End If<br/> Next<br/> Else<br/> Temp% = WritePrivateProfileString(SectionName, KeyWord, DefString, IniFileName)<br/> S = DefString<br/> End If<br/> GetIniS = S<br/>End Function<br/></font></p> <p>其实两种代码一般应用应该都是差不多的,而上面一种代码要少些,更简明.</p>
<p> </p>
<p>至于执行的效率,其实INI读写量一般不会太大,所以不容易出现效率问题.</p>
<p> </p>
<p>对于两种代码的写法谁好,我觉得都一样,INSTR函数本质上也是一个循环,只是VB封装了而已:)</p>
<p> </p>
<p>两种代码的问题,都是同一个问题,即不能正常返回中间带有NULL符的字符串.</p>
<p> </p>
<p>这样的字符串的典型应用是通用对话框进行多选时返回的文件列表,就是以NULL为分隔的,如果使用上面两种代码来返回,就会出现截断.</p>
<p> </p>
<p>要正常返回此类型的字符串,我的做法是,先以NULL为分隔符使用SPLIT进行拆分,再在提取各个字符串时将非空的数组成员视为有效返回内容.</p>
<p> </p>
<p>不过一般没人在注册表里放这样的字符串(我也不清楚系统是否有这样的字符串),所以也不用管了吧:)</p>
[此贴子已经被作者于2009-7-16 23:06:20编辑过]
页:
[1]