Class

StandardInputStream


Description

Used for reading text input in a ConsoleApplication.

Methods

Name

Parameters

Returns

Shared

EndOfFile

Boolean

Operator_Convert

TCPSocket

Read

Count As Integer, [Enc As TextEncoding]

String

ReadAll

encoding As TextEncoding = Nil

String

ReadLine

String

Method descriptions


StandardInputStream.EndOfFile

EndOfFile As Boolean

Returns True when there's no more data left to read.

This code reads the rows and columns of data from a tab-delimited text file into a ListBox:

Var f As FolderItem
Var textInput As TextInputStream
Var rowFromFile, oneCell As String

f = FolderItem.ShowOpenFileDialog("text/plain") ' defined as a FileType
If f <> Nil Then
  textInput = TextInputStream.Open(f)
  textInput.Encoding = Encodings.UTF8

  Do
    rowFromFile = textInput.ReadLine
    Var values() As String = rowFromFile.ToArray(String.Chr(9))
    ListBox1.ColumnCount = values.Count
    ListBox1.AddRow("")
    Var col As Integer
    For Each value As String In values
      ListBox1.CellTextAt(ListBox1.LastAddedRowIndex, col) = value
      col = col + 1
    End For
  Loop Until textInput.EndOfFile

  textInput.Close
End If

This example reads each pair of bytes from a file and writes them in reverse order to a new file. The user chooses the source file using the Open-file dialog box and saves the new file using the Save as dialog box. The EOF property is used to terminate the Do...Loop.

Var readFile As FolderItem = FolderItem.ShowOpenFileDialog("text")
If readFile <> Nil Then
  Var ReadStream As BinaryStream = BinaryStream.Open(readFile, False)
  ReadStream.LittleEndian = True
  Var writeFile As FolderItem = FolderItem.ShowSaveFileDialog("", "")
  If writeFile <> Nil Then
    Var writeStream As BinaryStream = BinaryStream.Create(writeFile, True)
    writeStream.LittleEndian = True
    Do Until ReadStream.EndOfFile
      writeStream.WriteInt8(ReadStream.ReadInt8)
    Loop
    writeStream = Nil
  End If
  readStream = Nil
End If

StandardInputStream.Operator_Convert

Operator_Convert As TCPSocket

Used to convert to a TCPSocket. See the Operator Convert method.

StandardInputStream incorporates a conversion operator so that you can use StdIn as a TCPSocket. This is useful only for services that are started for you by xinetd on macOS or Linux. Here is an example of how to use this:

Var Incoming As TCPSocket = Stdin

StandardInputStream.Read

Read(Count As Integer, [Enc As TextEncoding]) As String

Reads Count bytes from the input stream and returns a String.

If provided, the optional parameter Enc specifies the text encoding to be defined for the String to be read.

If Count is higher than the amount of bytes currently available in the stream, all available bytes will be returned. Therefore, make sure to always consider the case that you get less than you requested. To see if you received all requested bytes, check the returned string's String property (avoid using Length as it may give a different number if the encoding is not nil).

If not enough memory is available, you get back an empty string.

This example reads the first 1000 bytes from a BinaryStream.

Var readFile As FolderItem = FolderItem.ShowOpenFileDialog("text/plain")
If readFile <> Nil Then
  Var ReadStream As BinaryStream = BinaryStream.Open(readFile, False)
  ReadStream.LittleEndian = True
  TextArea1.Text = ReadStream.Read(1000, Encodings.UTF8)
End If

StandardInputStream.ReadAll

ReadAll(encoding As TextEncoding = Nil) As String

Reads all available data from the input stream without waiting for the user to press the Return or Enter key.

On macOS and Linux, ReadAll only reads the first 1024 bytes of data. You should continue reading until EOF to be sure you get all the data. ReadAll is a non-blocking operation.

Var s As String
s = StdIn.ReadAll

StandardInputStream.ReadLine

ReadLine As String

Reads from the input stream until the user presses the Return or Enter key. ReadLine does not include the Newline character as part of the returned String.

Var s As String
s = StdIn.ReadLine

Interfaces

The StandardInputStream class implements the Readable class interface.

Notes

Since there is only one StandardInputStream for the system, you do not need to create a StandardInputStream object to use; you just use StdIn.

StandardInputStream incorporates a conversion operator so that you can use StdIn as a TCPSocket. This is useful only for services that are started for you by xinetd on macOS or Linux. Here is an example of how to use this:

Var Incoming As TCPSocket = Stdin

Compatibility

All project types on all supported operating systems.

See also

Object parent class; ConsoleApplication, StandardOutputStream classes; Input, Print, StdErr, StdIn, StdOut methods; TargetDesktop constant.