Class
StandardInputStream
Description
Used for reading text input in a ConsoleApplication.
Methods
Name |
Parameters |
Returns |
Shared |
---|---|---|---|
Count As Integer, [Enc As TextEncoding] |
|||
encoding As TextEncoding = Nil |
|||
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.