小弟使用GetPrivateProfileString读取ini文件当其中必须给定返回字符串的长度,我设为256,并用dim a as string * 256接受,但是其实ini文件中的字符串并没有256个,而不管是不是使用trim()。这个字符串的len()都是256即使把他付给别的字符串也不行。十分郁闷。我想得到纯的字符,并把ini中的两个key值相加。
Dim Ret As String, NC As Long Ret = String(255, 0) NC = GetPrivateProfileString("Tip", "TimeStamp", vbNullString, Ret, 255, "C:\xdict.ini") If NC <> 0 Then Ret = Left$(Ret, NC) MsgBox Ret & vbCrLf & CStr(Len(Ret))
Dim ret As Long Dim buff As String Dim STR As String
Public Function ReadFromIni(ByVal FileName As String, ByVal Section As String, ByVal Key As String) As String Dim i As Long Dim buff As String * 128 GetPrivateProfileString Section, Key, "", buff, 128, FileName i = InStr(buff, Chr(0)) ReadFromIni = Trim(Left(buff, i - 1)) End Function Public Sub LoadParameter() label1.caption = Trim(ReadFromIni(App.Path & "\test.ini", "General", "UserName")) End Sub 這樣的問題我在改寫一個控件也曾遇見過﹐Trim沒有辦法去空格。 其實有個特殊的地方﹐把就是label控件﹐它自身有去空格的作用。 先把取得的值傳給label1.caption﹐然后讓text1.text=label1.caption 然后你用len(text1.text)再看看長度就不是256了。其實label的用處不只去空格﹐在變量傳遞過程中有很強的作用。
老兄:不必多说,送你个操作INI文件的类,我程序中所有对INI的操作都是用的这个类。 '******************************************************Option ExplicitPublic Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As LongPublic Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As LongPublic Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As LongPublic Function GetIniS(ByVal SectionName As String, ByVal KeyWord As String, ByVal DefString As String) As String Dim ResultString As String * 144, Temp As Integer Dim s As String, i As Integer '检索关键词的值 Temp% = GetPrivateProfileString(SectionName, KeyWord, "", ResultString, 144, AppProfileName()) '检验关键词是否为空 If Temp% > 0 Then s = "" For i = 1 To 144 If Asc(Mid(ResultString, i, 1)) = 0 Then Exit For Else s = s & Mid(ResultString, i, 1) End If Next i Else '将缺省值写入INI文件 Temp% = WritePrivateProfileString(SectionName, KeyWord, DefString, AppProfileName()) s = DefString End If GetIniS = s End FunctionPublic Function GetIniN(ByVal SectionName As String, ByVal KeyWord As String, ByVal DefValue As Integer) As Integer Dim d As Long, s As String d = DefValue GetIniN = GetPrivateProfileInt(SectionName, KeyWord, DefValue, AppProfileName()) If d <> DefValue Then s = "" d = WritePrivateProfileString(SectionName, KeyWord, s, AppProfileName()) End If End FunctionPublic Sub SetIniN(ByVal SectionName As String, ByVal KeyWord As String, ByVal ValInt As Integer) Dim res% Dim s$ s$ = Str$(ValInt) res% = WritePrivateProfileString(SectionName, KeyWord, s$, AppProfileName()) End SubPublic Sub SetIniS(ByVal SectionName As String, ByVal KeyWord As String, ByVal ValStr As String) Dim res% res% = WritePrivateProfileString(SectionName, KeyWord, ValStr, AppProfileName()) End SubPublic Function AppProfileName() As String AppProfileName = App.Path & "\yzmisinitial.ini" End Function
Public Function GetAutoID_PWD() As String Randomize GetAutoID_PWD = "ZQY" & Int((999 - 100 + 1) * Rnd + 100) End Function
各位老大,我在EXCEL中不论怎么读都是空的字符串阿
你忘记写入这句 Left(buff, n) 这样除了字符串本身,后面还有N个空格.你应该这样写 Dim buff As String * 255,n As Long n = GetPrivateProfileString("*****", "*****", "NONE", buff, 256, App.Path & "\****.ini") Str=Left(buff, n) 'Str既是想要得到的值
nRet = GetPrivateProfileString(.....)
retStr = left(strBuff, nRet)
如果返回字符串中有中文,应该做个变换,怎么变忘记了,自己摸索一下吧。
Ret = String(255, 0)
NC = GetPrivateProfileString("Tip", "TimeStamp", vbNullString, Ret, 255, "C:\xdict.ini")
If NC <> 0 Then Ret = Left$(Ret, NC)
MsgBox Ret & vbCrLf & CStr(Len(Ret))
Dim buff As String
Dim STR As String
buff = String(255, vbNullChar)
ret = GetPrivateProfileString("COMM", "com", "0", buff, 255, App.Path & "\ini\DMA_Analyse1.ini")
STR = Left(buff, InStr(buff, vbNullChar) - 1)
Dim i As Long
Dim buff As String * 128
GetPrivateProfileString Section, Key, "", buff, 128, FileName
i = InStr(buff, Chr(0))
ReadFromIni = Trim(Left(buff, i - 1))
End Function
Public Sub LoadParameter()
label1.caption = Trim(ReadFromIni(App.Path & "\test.ini", "General", "UserName"))
End Sub 這樣的問題我在改寫一個控件也曾遇見過﹐Trim沒有辦法去空格。
其實有個特殊的地方﹐把就是label控件﹐它自身有去空格的作用。
先把取得的值傳給label1.caption﹐然后讓text1.text=label1.caption
然后你用len(text1.text)再看看長度就不是256了。其實label的用處不只去空格﹐在變量傳遞過程中有很強的作用。
'******************************************************Option ExplicitPublic Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As LongPublic Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal nDefault As Long, ByVal lpFileName As String) As LongPublic Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As LongPublic Function GetIniS(ByVal SectionName As String, ByVal KeyWord As String, ByVal DefString As String) As String
Dim ResultString As String * 144, Temp As Integer
Dim s As String, i As Integer
'检索关键词的值
Temp% = GetPrivateProfileString(SectionName, KeyWord, "", ResultString, 144, AppProfileName())
'检验关键词是否为空
If Temp% > 0 Then
s = ""
For i = 1 To 144
If Asc(Mid(ResultString, i, 1)) = 0 Then
Exit For
Else
s = s & Mid(ResultString, i, 1)
End If
Next i
Else
'将缺省值写入INI文件
Temp% = WritePrivateProfileString(SectionName, KeyWord, DefString, AppProfileName())
s = DefString
End If
GetIniS = s
End FunctionPublic Function GetIniN(ByVal SectionName As String, ByVal KeyWord As String, ByVal DefValue As Integer) As Integer
Dim d As Long, s As String
d = DefValue
GetIniN = GetPrivateProfileInt(SectionName, KeyWord, DefValue, AppProfileName())
If d <> DefValue Then
s = ""
d = WritePrivateProfileString(SectionName, KeyWord, s, AppProfileName())
End If
End FunctionPublic Sub SetIniN(ByVal SectionName As String, ByVal KeyWord As String, ByVal ValInt As Integer)
Dim res%
Dim s$
s$ = Str$(ValInt)
res% = WritePrivateProfileString(SectionName, KeyWord, s$, AppProfileName())
End SubPublic Sub SetIniS(ByVal SectionName As String, ByVal KeyWord As String, ByVal ValStr As String)
Dim res%
res% = WritePrivateProfileString(SectionName, KeyWord, ValStr, AppProfileName())
End SubPublic Function AppProfileName() As String
AppProfileName = App.Path & "\yzmisinitial.ini"
End Function
Public Function GetAutoID_PWD() As String
Randomize
GetAutoID_PWD = "ZQY" & Int((999 - 100 + 1) * Rnd + 100)
End Function
你忘记写入这句
Left(buff, n) 这样除了字符串本身,后面还有N个空格.你应该这样写
Dim buff As String * 255,n As Long
n = GetPrivateProfileString("*****", "*****", "NONE", buff, 256, App.Path & "\****.ini")
Str=Left(buff, n) 'Str既是想要得到的值