首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

关于Vb中字符串的比较有关问题

2012-12-17 
关于Vb中字符串的比较问题Private Sub Command1_Click()Dim sSection As StringDim sKeyName As StringDim

关于Vb中字符串的比较问题

Private Sub Command1_Click()
Dim sSection As String
    Dim sKeyName As String
    Dim sDefault As String
    Dim sProfile As String
    Dim lRetCode As Long
    Dim lSize As Long
    Dim Gs_SysName As String
    
     sSection = "CONFIG"
    sKeyName = "SysName"
    sDefault = "0000000000000000000000000000000000000000000000000000000000000000000"
    Gs_SysName = sDefault
    lSize = Len(sDefault)
    sProfile = App.Path & "\setup\Feq.ini"
    lRetCode = GetPrivateProfileString(sSection, sKeyName, sDefault, Gs_SysName, lSize, sProfile)
    Gs_SysName = Left(Trim(Gs_SysName), lRetCode)
    
    If StrComp(Gs_SysName, sDefault) Then
        MsgBox "请检查配置文件的参数值(Gs_SysName)!", vbInformation + vbOKOnly, "信息提示"

    End If
End Sub

问题:Gs_SysName, sDefault两个字符串的长度都是67,而且又都是0,但不知道为什么就是不相等!困惑亚!谢谢了!
[最优解释]

Private Sub Command1_Click() 
Dim sSection As String 
    Dim sKeyName As String 
    Dim sDefault As String 
    Dim sProfile As String 
    Dim lRetCode As Long 
    Dim lSize As Long 
    Dim Gs_SysName As String 
    
    sSection = "CONFIG" 
    sKeyName = "SysName" 
    sDefault = "0000000000000000000000000000000000000000000000000000000000000000000" 
    Gs_SysName = Space(250)
    lSize = Len(Gs_SysName) 
    sProfile = App.Path & "\setup\Feq.ini" 
    Call GetPrivateProfileString(sSection, sKeyName, sDefault, Gs_SysName, lSize, sProfile) 
    lRetCode = InStr(1, Gs_SysName, Chr(0))
    Gs_SysName = Left(Gs_SysName, lRetCode-1) 
    
    If StrComp(Gs_SysName, sDefault) Then 
        MsgBox "请检查配置文件的参数值(Gs_SysName)!", vbInformation + vbOKOnly, "信息提示" 

    End If 
End Sub 

[其他解释]
乱猜下
len(gs_sysname)
len(sdefault)
这两个值比较看看?

[其他解释]
lRetCode = GetPrivateProfileString(sSection, sKeyName, sDefault, Gs_SysName, lSize + 1, sProfile) 

[其他解释]
你好,可是说的更详细些吗?谢谢!


[其他解释]
GetPrivateProfileString取出来的后面可能有特殊的格式字符,如vbcrlf、vbcr、vblf、vbtab等等
[其他解释]
不好所意思,还是不明白,即便有其他字符,那是怎么产生的呢?~_~
[其他解释]
你经过这两步还相等吗
lRetCode = GetPrivateProfileString(sSection, sKeyName, sDefault, Gs_SysName, lSize, sProfile) 
Gs_SysName = Left(Trim(Gs_SysName), lRetCode)
是不是有什么参数错了,再检查检查
[其他解释]
经过逐步分析,发现Gs_SysName的第67位在 Gs_SysName = Left(Trim(Gs_SysName), lRetCode) 
这个步骤之后就从0变成了“空格”,不知道是为什么,还请各位多多帮忙,谢谢了!
[其他解释]
lRetCode = GetPrivateProfileString(sSection, sKeyName, sDefault, Gs_SysName, lSize, sProfile) 
    Gs_SysName = Left(Trim(Gs_SysName), lRetCode) 

这两句以后,Gs_SysName 还能是0000000..吗?
[其他解释]
If StrComp(Gs_SysName, sDefault) Then 
   MsgBox "请检查配置文件的参数值(Gs_SysName)!", vbInformation + vbOKOnly, "信息提示" 
End If
你的意思是上面为什么没有弹出对话框“请检查配置文件的参数值(Gs_SysName)!"是吗?,你的比较StrComp(Gs_SysName, sDefault)相等返回的是0,如果非0才会弹出对话框阿,StrComp(Gs_SysName, sDefault)比较小于返回-1、相等0、大于返回1,而if语句是0相当于false,其他的非0相当于true.
[其他解释]
GetPrivateProfileString取得的Gs_SysName应该在结尾有个'\0',要去掉才能比较的
[其他解释]
Gs_SysName的信息是配置文件的值,你配置文件里面值是多少
[其他解释]
做人要厚道,你是不是该给楼上的高手散分啦?

热点排行