İçeriğe geç

stdin / stdout / stderr

Üç küçük modül, programı başlatıldığı akışlara bağlar: böylece program bir borudan girdi alabilir ve çıktısını tanı mesajlarından ayırabilir.

import { readLine, readAll, readBytes } from stdin;
import { write, writeBytes } from stdout;

Hem stdout hem stderr, write ve writeBytes adlarını dışa verir. Aynı adı tek dosyada ikisinden birden içe aktarmak çakışmadır; birini as ile yeniden adlandırın:

import { write } from stdout;
import { write as hataYaz } from stderr;

Bir satır okur, satır sonu karakteri olmadan. Girdi bittiğinde null döner; döngünün duracağını böyle anlar.

Dönüş tipi string?’dır ve while koşulundaki null denetimi döngü gövdesinde tipi daraltmaz. Okumayı döngünün içinde yapın ve null gelince çıkın:

import { readLine } from stdin;
import { write } from stdout;
int main() {
while (true) {
string? satir = readLine();
if (satir == null) {
break;
}
write("> ");
write(satir);
write("\n");
}
return 0;
}
Terminal window
printf "bir\niki\n" | saqut run yankila.sqt
> bir
> iki

Standart girdinin tamamını tek bir metin olarak okur. Küçük girdiler için elverişlidir; girdinin tamamını bir anda bellekte tuttuğunu unutmayın.

Standart girdinin tamamını ham bayt olarak okur; metin olmayan ikili veri için. Sonradan metin gibi ele almaya karar verirseniz utf8::decode kullanın.

Metni akışa yazar, sona satır sonu eklemeden. print() fonksiyonunun aksine hiçbir şey eklemez: satır sonu istiyorsanız "\n" karakterini kendiniz yazarsınız.

Ham bayt yazar; metin olmayan çıktı için.

Standart çıktı programın sonucunu, standart hata ise koşuyla ilgili mesajları taşır. Bu ayrım, çağıranın birini yönlendirip diğerini görmeye devam etmesini sağlar:

Terminal window
saqut run rapor.sqt > sonuc.txt # sonuç dosyaya, hatalar ekranda kalır
import { write } from stdout;
import { write as hataYaz } from stderr;
int main() {
hataYaz("girdi okunuyor...\n"); // ilerleme, sonucun parçası değil
write("42\n"); // sonuç
return 0;
}

İlerleme mesajını standart çıktıya göndermek, onu veriyle karışmış biçimde sonuc.txt dosyasına koyardı.

Modül Fonksiyon Döndürür İşlevi
stdin readLine() string? Bir satır, girdi bittiyse null
stdin readAll() string Girdinin tamamı, metin olarak
stdin readBytes() byte[] Girdinin tamamı, ham bayt olarak
stdout write(text) void Metin yazar, satır sonu eklemez
stdout writeBytes(data) void Ham bayt yazar
stderr write(text) void Standart hataya metin yazar
stderr writeBytes(data) void Standart hataya ham bayt yazar

Standart girdiden okumak, boruya ne verildiğine bağlıdır; bu yüzden girdi okuyan bir program tek başına tekrarlanabilir değildir, aynı girdi dosyasıyla çalışan aynı program ise tekrarlanabilirdir.