0

Right now I am building a scripting language (EngineScript). Currently you can only type a single command/function (IE: sout "Hello world") but I want to expand it.

So I was wondering whether you guys knew any code to get the characters typed after a newline into a separate variable in VB2012.Net. Thanks :-)

Here is my code:

Public Class Form1

    Dim strvar0 As String
    Dim strvar1 As String
    Dim strvar2 As String
    Dim strvar3 As String
    Dim numvar As Integer


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim first4Chars As String = TextBox1.Text.Substring(0, 4)
        Dim restOfChars As String = TextBox1.Text.ToString.Substring(5)

        Select Case first4Chars
            Case "sout"
                Select Case restOfChars
                    Case "box:str0"
                        TextBox2.Text = strvar0 & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "COMMAND //sout\\ has been successfully used"
                    Case Else
                        TextBox2.Text = restOfChars & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "COMMAND //sout\\ has been successfully used"
                End Select

            Case "str0"
                strvar0 = restOfChars

            Case Else
                TextBox2.Text = "Error".ToString

        End Select

    End Sub



    Private Sub HelpToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HelpToolStripMenuItem.Click
        Dim a As New Help
    End Sub

    Private Sub RunToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles RunToolStripMenuItem.Click
        Button1.PerformClick()
    End Sub

End Class

...I am doing this is a Windows form

@Jamby when I use your code:

Public Class Form1
    Dim strvar0 As String
    Dim strvar1 As String
    Dim strvar2 As String
    Dim strvar3 As String
    Dim numvar As Integer



    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        For Each Line In TextBox1.Text.Split(vbNewLine)

            Dim first4Chars As String = TextBox1.Text.Substring(0, 4)
            Dim restOfChars As String = TextBox1.Text.ToString.Substring(5)

            Select Case first4Chars
                Case "sout"
                    Select Case restOfChars
                        Case "box:str0"
                            TextBox2.Text = strvar0 & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "COMMAND //sout\\ has been successfully used"
                        Case Else
                            TextBox2.Text = restOfChars & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "COMMAND //sout\\ has been successfully used"
                    End Select

                Case "str0"
                    strvar0 = restOfChars


                Case "exit"
                    Me.Close()

                Case "lofi"

                    Select Case restOfChars
                        Case "box:str0"
                            Process.Start(strvar0)
                        Case Else
                            Process.Start(restOfChars)
                    End Select


                Case "inet"
                    Process.Start("iexplore.exe" + restOfChars)
                Case Else
                    TextBox2.Text = "Error".ToString


            End Select
        Next

        TextBox1.Clear()

    End Sub



    Private Sub HelpToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles HelpToolStripMenuItem.Click
        Dim a As New Help
    End Sub

    Private Sub RunToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles RunToolStripMenuItem.Click
        Button1.PerformClick()


    End Sub

    Private Sub MenuStrip1_ItemClicked(sender As Object, e As ToolStripItemClickedEventArgs) Handles MenuStrip1.ItemClicked

    End Sub
End Class

It does not generate errors but when I type

sout Hello newline sout World

the following should output from my output window:

Hello



COMMAND //sout\\ has been successfully used
World




COMMAND //sout\\ has been successfully used

But instead this happens:

Hello
sout World



COMMAND //sout\\ has been successfully used

Help!!!

2 Answers2

0

I think what you want to use is a multiline Textbox in your Form (there is a property/checkbox for multiline for Textboxes).

Then you can get the string from the Textbox, and do split('\n'); on it. (in VB syntax of course)

That will return an array of strings, which are your lines.

The code to split will look like: (well, in C# anyway)

string contents = MyTextBox.Text;
string[] lines = contents.Split('\n'); // or Environment.NewLine instead of '\n'
canhazbits
  • 1,664
  • 1
  • 14
  • 19
0

You can change you code in this way:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    For Each Line in TextBox1.Text.Split(vbNewLine)
        Dim first4Chars As String = Line.Substring(0, 4)
        Dim restOfChars As String = Line.Substring(5)

        Select Case first4Chars
            Case "sout"
                Select Case restOfChars
                    Case "box:str0"
                        TextBox2.Text = strvar0 & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "COMMAND //sout\\ has been successfully used"
                    Case Else
                        TextBox2.Text = restOfChars & vbCrLf & vbCrLf & vbCrLf & vbCrLf & "COMMAND //sout\\ has been successfully used"
                End Select
            Case "str0"
                strvar0 = restOfChars
            Case Else
                TextBox2.Text = "Error".ToString
        End Select
    Next
End Sub

You should also check Line.Lenght to be greater than 5, or you'll get an ArgumentOutOfRangeException.

Jamby
  • 1,886
  • 2
  • 20
  • 30