Arrays VB6:从数组中获取以x开头的字符串
假设我有一个数组,Arrays VB6:从数组中获取以x开头的字符串,arrays,indexing,vb6,Arrays,Indexing,Vb6,假设我有一个数组,arr,它最多包含20个子字符串。在本例中,数组将有4个子字符串: arr={“AAAA:1234567”、“BBBB:2345678”、“CCCC:98765432”、“DDDD:87654321”} 注:资本化并不重要 我需要帮助在数组中查找一个子字符串(同样,最多可能有20个字符串),以CCCC:开头,然后将整个字符串分配给它自己的变量,我们称之为Var1 我知道我可以分配Var1=arr(2),但我需要找出如何确定数组中符合我的条件的索引号 我真正欣赏的是制作一个独立的
arr
,它最多包含20个子字符串。在本例中,数组将有4个子字符串:
arr={“AAAA:1234567”、“BBBB:2345678”、“CCCC:98765432”、“DDDD:87654321”}
注:资本化并不重要
我需要帮助在数组中查找一个子字符串(同样,最多可能有20个字符串),以CCCC:
开头,然后将整个字符串分配给它自己的变量,我们称之为Var1
我知道我可以分配Var1=arr(2)
,但我需要找出如何确定数组中符合我的条件的索引号
我真正欣赏的是制作一个独立的功能,例如:
Function ArrayIndex(ArrayInput as Variant, StartsWith as String) as Byte
'Arguments Here
End Function
然后我可以在我的子程序中使用这个:
Var1 = arr(ArrayIndex(arr, "CCCC:"))
更新1
下面是我当前代码的一个片段
Sub T_Report
'<Shortcut = Shift+Ctrl+T>
Dim Data as String, DataArray as Variant
With ActiveSession
.Copy 0, 2, 80, 21 'Just a big block of text with multiple lines, copied to clipboard
Data = Clipboard 'Set Data to the clipboard value
DataArray = Split(Data,vbCrLf) 'This is "Data" in an Array, separated by line breaks
'Just checking to see if the Array was successful (it is)
Debug.Print DataArray(0) & vbNL & DataArray(1) & vbNL & DataArray(2) & _
vbNL & DataArray(3) & vbNL & DataArray(4) & vbNL & vbNL
'Misc code here
Dim sF1 as String, sF2 as String, sF3 as String
Dim Rslt1 as String, Rslt2 as String, Rslt3 as String
sF1 = "Field1:"
sF2 = "Field2:"
sF3 = "Field3:"
MsgBox DataArray(0) ' This works fine, giving me first substring
Rslt1 = FindMyString(sF1, DataArray)
' Misc Code
End With
End Sub
编辑-修复阵列负载
更改此项(它必须给您一个错误!):
arr = {"AAAA: 1234567" , "BBBB: 2345678" , "CCCC: 98765432" , "DDDD: 87654321"}
Dim arr As Variant
arr = Split("AAAA: 1234567,BBBB: 2345678,CCCC: 98765432,DDDD: 87654321", ",")
对此:
arr = {"AAAA: 1234567" , "BBBB: 2345678" , "CCCC: 98765432" , "DDDD: 87654321"}
Dim arr As Variant
arr = Split("AAAA: 1234567,BBBB: 2345678,CCCC: 98765432,DDDD: 87654321", ",")
如果您想使用函数来执行命令,可以使用ParamArray类型传递数据数组。它必须是函数中的最后一个参数
这应该满足您的要求:
Private Function FindMyString(strToFind as string, ParamArray arr() As Variant) As String
Dim i As Integer
Dim iLen as Integer
Dim strArr as String
FindMyString = "" ' Returns Blank String if not found '
Debug.Print arr(0)(0) ' Print first element of array
iLen = Len(strToFind)
For i = 0 To UBound(arr(0))
strArr = CStr(arr(0)(i))
If strToFind = Left$(strArr, iLen) Then
FindMyString = strArr
Exit Function
End If
Next i
End Function
在您的示例中,您可以通过以下方式进行测试:
Var1 = FindMyString("CCCC:", arr)
您需要使用mid()来获取所需的子字符串,例如:如果mid(arr[0],1,5)=“CCCC:”那么如果它只出现一次,那么对于(i=1到20)来说,如果mid(arr[i],1,5)=“CCCC:”那么返回i@fernando.reyes有正确的方法,但我更喜欢I=LBound(arr)的
,而不是UBound(arr)
。如果有一天阵列最大值更改为21,则无需触摸。如果您的阵列只有5个项目,则可避免错误。对-需要为字符串指定字符串-我将更新代码您设置arary时一定会遇到错误-如果您通过阵列,我怀疑这是您当前的代码-我编辑了我的代码以修复您的错误数组-你应该更新你的问题以显示你当前的代码。无法修复我们看不到的内容。好的-看起来VB将数组更改为0,并在外部使用索引(这可能不是正确的术语)-更新了我的代码谢谢你挂在那里