Small Basic: How to Convert Multi-Line Text into an Array of Lines

Small Basic can get multi-line text into a variable from multi-line input text box with Controls.GetTextBoxText() or from text file with File.ReadContents().  The following sample code shows how to convert a multi-line text into an array of lines.

CRLF = Text.GetCharacter(13) + Text.GetCharacter(10)
GraphicsWindow.BackgroundColor = "LightGray"
GraphicsWindow.BrushColor = "Black"
gw = GraphicsWindow.Width
gh = GraphicsWindow.Height
tb = Controls.AddMultiLineTextBox(0, 0)
Controls.SetSize(tb, gw,  gh - 30)
Controls.AddButton("Enter", gw -  50, gh - 30)
Controls.ButtonClicked = OnButtonClicked
Sub OnButtonClicked
  buf = Controls.GetTextBoxText(tb)
  ConvertTextToLines()
  ShowLines()
EndSub
Sub ConvertTextToLines
  len = Text.GetLength(buf)
  nLines = 0
  ptr = 1
  While ptr <= len
    eol = Text.GetIndexOf(Text.GetSubTextToEnd(buf, ptr), CRLF)
    If eol =  0 Then ' eol not found
      nLines = nLines  + 1
      lines[nLines] = Text.GetSubTextToEnd(buf, ptr)
      ptr = len  + 1
    Else ' eol found
      nLines = nLines  + 1
      lines[nLines] = Text.GetSubText(buf, ptr,  eol - 1)
      ptr = ptr  + eol + 1
    EndIf    
  EndWhile
EndSub
Sub ShowLines
  For i =  1 To nLines
    TextWindow.WriteLine("lines[" + i  + "]: " + lines[i])
  EndFor
EndSub

See Also

The program listed above doesn't work properly in remote.  Following article shows the workaround for that issue.

Small Basic Known Issue: 23589 - Controls.GetTextBoxText() Returns CR+LF as Newline from Multi-Line Text Box in Local but CR in Remote

Other Languages