Próbuję zrobić narzędzie podobne do narzędzia, które używa Rebol 3 do przetwarzania większych plików tekstowych za pomocą potoków i narzędzi Bash. Mam problem z odczytaniem linii STDIN po linii w Rebol 3?Rebol 3: czytanie STDIN wydajnie linia po linii (do tworzenia narzędzia awk)
Na przykład ta komenda powłoki produkuje 3 linie:
$ (echo "first line" ; echo "second line" ; echo "third line")
first line
second line
third line
Ale wejście słowo w REBOL czyta wszystkie 3 linie w tym samym czasie. Spodziewam się, że zatrzyma się na linii nowej, ponieważ zatrzymuje się, jeśli interaktywnie używasz danych wejściowych.
r3 --do 'while [ x: input ] [ if empty? x [ break ] print x print "***" ]'
abcdef
abcdef
***
blabla
blabla
***
Ale kiedy uruchomię to wszystko razem, odczyta cały sygnał wejściowy na raz. Mógłbym przeczytać go od razu i podzielić na linie, ale chcę, żeby działał w sposób "streamingowy", jak zwykle cat w wielu 1000-sekundach linii.
$ (echo "first line" ; echo "second line" ; echo "third line") \
| r3 --do 'while [ x: input ] [ if empty? x [ break ] print x print "***" ]'
first linesecond linethird line
***
ja również spojrzał na źródło wejścia zrobić podobną funkcję. Mogłem odczytać postać na znak w pętli podczas i sprawdzić dla znaków nowej linii, ale to nie wydaje się skuteczne.
Dobre znaleźć o 'odczytu/lines' buforowanie na stdin. Jednak nie działa to w pełni na MacOS (OSX) :(Zamiast 'block!' Zwraca 'binary!' Z 34815 bajtów (dopóki STDIN nie jest wyczerpany) NB. W rzeczywistości '/ lines' (i '/ string') nic nie robią na MacOS :( – draegtun