Option Explicit
'-------------------------------------------------------------
Private Sub Form_Load()
'
Dim strTMP As String
Dim arr As Variant
Dim intCount As Integer
Dim i As Integer
'
strTMP = Command$
If strTMP = "" Then Exit Sub
'
ReDim arr(0)
arr = Split(strTMP, " ")
intCount = UBound(arr)
'
For i = 0 To intCount
lstCommand.AddItem arr(i)
Next i
'
End Sub
'Разделение строки на подстроки
Public Function Delimit(ByVal No As Long, ByVal Text As String, Optional ByVal Delimiters As String = ";", Optional ByVal Mode As Integer = 0) As Variant
'* No - НомерЭлемента (по умолчанию равен 0)
' Номер элемента, который необходимо получить. Если указан 0 (нулевой элемент),
' то возвращается количество элементов в строке.
'* Text - Текст
' Строка, которая будет "расщеплена".
'* Delimiters - Разделители (по умолчанию равен ";")
' Перечень разделителей. Формат указания зависит от указанного режима.
'* Mode - Режим (по умолчанию равен 0)
' Режим разделения строки. Может принимать следующие значения:
' * 0
' Разделителем является любой символ, перечисленый в разделителях.
' Пример: Delimit(0, "1,2;3,4,5;6", ",;", 0) = 6
' * 1
' Разделителем является последовательность символов, указанных в разделителях.
' Пример: Delimit(0, "1/*/2,3/*/4", "/*/", 1) = 3
' * 2
' Элементы заключены в кавычки (первый и второй символ разделителя) и разделены
' разделителем (остальные символы разделителя)
' Пример: Delimit(0, "<1,2>,<3>,<4,5;6>", "<>,", 2) = 3
' * 3
' Разделители указывают фиксированные позиции полей, разделенные запятой.
' Пример: Delimit(0, "Фам Имя Отчество", "1,5,9", 3) = 3
Dim D As String, BO As String, BC As String, fB As Boolean, FN As Boolean
Dim FPos() As Integer, NumPos As Integer, CurPos As Integer
Dim V As Variant, C As Long, N As Long, I As Long, Z As String
'Подготовка данных к обработке
D = Delimiters
BO = "": BC = ""
NumPos = 0
Select Case Mode
Case 2
BO = Mid$(Delimiters, 1, 1)
BC = Mid$(Delimiters, 2, 1)
D = Mid$(Delimiters, 3)
Case 3
D = Delimiters
NumPos = Delimit(0, D, ",")
ReDim FPos(0 To NumPos)
For CurPos = 1 To NumPos
FPos(CurPos) = Val(Delimit(CurPos, D, ","))
Next CurPos
End Select
'Подсчет количества элементов и выделение нужного элемента
C = 0
V = ""
If Len(Text) > 0 Then
Select Case Mode
Case 0
Text = Text + Left$(D, 1)
I = 1
Do While I <= Len(Text)
If InStr(D, Mid$(Text, I, 1)) > 0 Then
If No > 0 And No = C + 1 Then V = V & Left$(Text, I - 1)
Text = Mid$(Text, I + 1)
I = 1
C = C + 1
Else
I = I + 1
End If
Loop
Case 1
Text = Text + D
Do While InStr(Text, D) > 0
I = InStr(Text, D)
If I > 0 Then
If No > 0 And No = C + 1 Then V = V & Left$(Text, I - 1)
Text = Mid$(Text, I + Len(D))
C = C + 1
End If
Loop
Case 2
fB = False: FN = True
Do
If fB Then
I = InStr(Text, BC)
If I = 0 Then Exit Do
If No > 0 And No = C Then
If Len(V) > 0 Then V = V & D
V = V & Left$(Text, I - 1)
fB = False
Text = Mid$(Text, I + Len(BC))
End If
Else
If FN Then
I = InStr(Text, BO)
If I = 0 Then Exit Do
fB = True
C = C + 1
FN = False
Else
I = InStr(Text, IIf(Len(D) = 0, BO, D))
If I = 0 Then Exit Do
FN = True
Text = Mid$(Text, I + Len(D))
End If
End If
Loop
Case 3
C = NumPos
If No > 0 Then
I = FPos(No)
If No = C Then N = Len(Text) + 1 Else N = FPos(No + 1)
V = Mid$(Text, I, N - I)
End If
End Select
End If
'Если требуется количество элементов, то они уже известны
If No = 0 Then
Delimit = C
Exit Function
End If
'Если запрашивается элемент с номером большим, чем имеется всего,
'то возвратить пустую строку
If No > C Then
Delimit = "" 'Empty
Exit Function
End If
Delimit = V
End Function
msg = IIf(Dir("c:\123.txt") <> "", "Файл есть", "Файла нет")
MsgBox msg
Сейчас этот форум просматривают: AhrefsBot, Yandex-бот и гости: 1