Input & Output
Strata provides comprehensive Input/Output capabilities, allowing you to interact with the console, file system, and data streams. These functions are part of the standard library and are available globally.
Console Output
Standard Output
You can print text to the standard output (stdout) using print or echo.
print
print is a function that outputs a string or value.
fn print(value: String): Voidprint("Hello, Strata!");
// Output: Hello, Strata!echo
echo is a language construct that outputs one or more strings.
echo "Status: ", "Active", "\n";Formatting Output
Strata uses string interpolation as the primary way to format output. This is clearer and safer than standard format strings.
let name = "Luna";
let score = 100;
print("Player ${name} scored ${score} points.");For advanced formatting (like separate decimal places or padding), you can use the sprintf function:
fn sprintf(format: String, ...values: Mixed): Stringlet pi = 3.14159;
let formatted = sprintf(format: "Pi is approximately %.2f", values: pi);
print(formatted); // "Pi is approximately 3.14"Console Input
Reading User Input
To read input strictly from the command line, use the readline function. It pauses execution and waits for the user to type a line of text.
fn readline(): Stringprint("Please enter your name: ");
let name = readline() as String;
print("Hello, ${name}!");File I/O
Strata provides a robust set of functions for working with files, tailored for performance and reliability.
Reading Files
The simplest way to read a file is file_get_contents, which reads the entire file into a string.
fn file_get_contents(filename: String): Stringlet path = "config.json";
if file_exists(path) {
let content = file_get_contents(filename: path);
print("File size: " . strlen(content));
} else {
print("Error: File not found.");
}Writing Files
file_put_contents writes data to a file. It creates the file if it doesn't exist and overwrites it if it does.
fn file_put_contents(filename: String, data: String, flags: Int = 0): Intlet logMessage = "[INFO] Application started.\n";
file_put_contents(filename: "app.log", data: logMessage);To append to a file instead of overwriting, you can use the FILE_APPEND flag:
file_put_contents(filename: "app.log", data: "New entry.\n", flags: FILE_APPEND);Advanced File Operations
For processing large files line-by-line or handling binary data, use file handles (fopen, fgets, fclose).
Reading Line-by-Line
let handle = fopen("large_data.txt", "r");
if handle {
while !feof(handle) {
let line = fgets(handle);
if line {
print("Line: ${line}");
}
}
fclose(handle);
}Standard Streams
Strata allows direct interaction with standard input, output, and error streams using special stream URIs: php://stdin, php://stdout, and php://stderr.
Writing to Stderr
It is best practice to write error messages to stderr so they can be separated from normal program output.
let stderr = fopen("php://stderr", "w");
fwrite(stderr, "Critical Error: Database connection failed.\n");
fclose(stderr);