I'm trying to create a series of commands that can take parameters. To pick up each separate command I am using Select Case The problem with this is I can't sense the 'parameters' (the second part of the string) if I use Case Else. If I don't use Case Else then I can't handle incorrect commands and send them off to the required procedure.
For Example:
Private Sub AllocateType(ByVal Command As String)
Select Case Command
Case "Eat"
'Call Eat procedure
Case "Use"
'Call Use procedure
Case "Quit"
Case "Pause"
Case "Go"
Case Else
Errors() 'Error handling procedure
End Select
End Sub
If the command was 'Brrrrr', it would call Errors(). Yet if the command was 'Eat Food', it would still call Errors() and not pass the parameters to the Eat procedure.
Edit, because it now doesn't work.
I've tried what was suggested, but I still have exactly the same problem. It seems both Command.StartsWith and Command.Contains don't work because if I try to enter 'Eat Food', it still doesn't recognise it as a case.
Example:
Select Case Command
Case Command.Contains("Eat")
Output("TESTING")
If Len(Command) > 4 Then
Command = Mid(Command, 4, (Len(Command) - 4))
Interaction(Command)
Else
Output("Eat What?")
End If
Case "Eat"
Output("Eat What?")
Case Command.StartsWith("Use")
If Len(Command) > 4 Then
Command = Mid(Command, 4, (Len(Command) - 4))
Interaction(Command)
Else
Output("Use What?")
End If
Case "Use"
Output("Use What?")
'Case Else
' Errors()
End Select
You need to use an IF statement to preform the kind of check you want.
You have two options StartsWith and Contains.StartsWith will allow you to check if your keywords are at the start of the string.
Contains will allow you to check if your keyword exits anywhere.
StartsWith Example
Private Sub AllocateType(ByVal Command As String)
If Command.StartsWith("Eat") Then
'Call Eat procedure
Else If Command.StartsWith("Use") Then
'Call Use procedure
Else If Command.StartsWith("Quit") Then
'Call Quit procedure
Else If Command.StartsWith("Pause") Then
'Call Pause procedure
Else If Command.StartsWith("Go") Then
'Call Go procedure
Else
Errors()
End If
End Sub
Contains Example
Private Sub AllocateType(ByVal Command As String)
If Command.Contains("Eat") Then
'Call Eat procedure
Else If Command.Contains("Use") Then
'Call Use procedure
Else If Command.Contains("Quit") Then
'Call Quit procedure
Else If Command.Contains("Pause") Then
'Call Pause procedure
Else If Command.Contains("Go") Then
'Call Go procedure
Else
Errors()
End If
End Sub
Also with StartsWith or Contains you can do StringComparison this will allow you to ignore case.
If Command.StartsWith("Eat", StringComparison.OrdinalIgnoreCase) Then
OR
If Command.Contains("Eat", StringComparison.OrdinalIgnoreCase) Then
Ignoring the case will match "EAT", "Eat", "eAt", etc.
True, you can keep your Select Case block, but since you are not checking for exact equality of String you should check for Command.Contains("Eat") or Command.StartsWith("Eat") depending on your goal
for insance;
Private Sub AllocateType(ByVal Command As String)
Select Case True
Case Command.StartsWith("Eat")
'Call Eat procedure
Case Command.StartsWith("Use")
'Call Use procedure
Case Command.StartsWith("Quit")
Case Command.StartsWith("Pause")
Case Command.StartsWith("Go")
Case Else
Errors() 'Error handling procedure
End Select
End Sub
You can keep Case structure:
Private Sub AllocateType(ByVal Command As String)
Select Case True
Case Command.StartsWith("Eat")
'Call Eat procedure
Case Command.StartsWith("Use")
'Call Use procedure
Case Command.StartsWith("Quit")
Case Command.StartsWith("Pause")
Case Command.StartsWith("Go")
Case Else
Errors() 'Error handling procedure
End Select
End Sub
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With