我在我的程序中写了一个search function
,它将返回一个text file
中是否有特定字符串。现在问题函数没有完全匹配。
请考虑以下示例数据,这些数据将位于我的text file
内,此处我的功能无法识别两个值是不同的。
sample data 1 : fol1_fol2_SMPTR
和sample data 2 : fol1_fol2_SMPTR1
。
请在下面找到我的搜索代码。
strFileName = "C:\data\datafile.txt"
将sample data 1 and 2
视为变量strSearch
Function sheetExists(strSearch, strFileName) As Boolean
sheetExists = False
Dim strLine As String
Dim f As Integer
Dim lngLine As Long
Dim blnFound As Boolean
f = FreeFile
Open strFileName For Input As #f
Do While Not EOF(f)
lngLine = lngLine + 1
Line Input #f, strLine
If InStr(1, strLine, strSearch, vbBinaryCompare) > 0 Then
'MsgBox "Search string found in line " & lngLine, vbInformation
blnFound = True
Exit Do
End If
Loop
Close #f
If blnFound Then
sheetExists = True
End If
End Function
让我知道您宝贵的建议和想法。
答案 0 :(得分:1)
根据您所描述的内容,听起来您希望在分隔符之后将文本放在一行(在本例中为:
)。
找到分隔符的位置:
。
InStr(1, strLine, ":")
为它添加1以获取紧随其后的角色的位置。
InStr(1, strLine, ":") + 1
使用Mid$
函数获取从该位置开始到该字符串结尾的字符串(注意Mid$
有3个参数;忽略最后一个将假设您需要字符串从第二个参数给出的位置开始到字符串的结尾处。)
Mid$(strLine, InStr(1, strLine, ":") + 1)
使用LTrim$
修剪字符串的左侧以删除任何前导空格。
LTrim$(Mid$(strLine, InStr(1, strLine, ":") + 1))
最后,将其与搜索字符串进行比较。
LTrim$(Mid$(strLine, InStr(1, strLine, ":") + 1)) = strSearch
简而言之,改变一下:
If InStr(1, strLine, strSearch, vbBinaryCompare) > 0 Then
对此:
If LTrim$(Mid$(strLine, InStr(1, strLine, ":") + 1)) = strSearch Then
答案 1 :(得分:0)
如果我正确读取了这个,你想确保文件中匹配的字符串与第一个值完全相同。
一个建议是检查与分隔字符连接的strSearchValue。
例如,如果“示例数据1:fol1_fol2_SMPTR”后跟一个空格,您可以检查使用
If InStr(1,strLine, strSearch & " ",vbBinaryCompare) > 0 Then...
否则,如果输入值只需要与行完全匹配,并且没有其他字符,那么您可以使用
If strSearch = strLine Then...
由于