Schrift
[thread]8384[/thread]

binäres Lesen von STDIN: ASCII-Nummern von STDIN ausgeben



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Gast Gast
 2006-10-04 16:00
#70477 #70477
Ich möchte die ASCII-Nummern der eingegebenen Zeichen ausgeben.

Beim Ausführen meines Quelltextes erhalte ich aber folgenden Fehler:
"Ein Prozess hat versucht, zu einer nicht bestehenden Pipe zu schreiben."

Demnach sollte was bei der Ausgabe nicht stimmen, weiß aber nich wirklich was ... :-(

Code: (dl )
1
2
3
4
5
6
7
binmode(STDIN);
binmode(STDOUT);

while($zeichen = getc(STDIN))
{
print ord($zeichen);
}


Konsolenbefehl:
type blah.txt | test.pl

Kann mir jemand bei dem Problem helfen?!
Wenn möglich etwas ausführlicher, beschäftige mich erst seit kurzem mit perl ... ;-)
docsnyder
 2006-10-04 16:41
#70478 #70478
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
Warum ein Aufruf mit Pipe?

Warum nicht einfach so?:

Code: (dl )
test.pl blah.txt


Gruß, Doc
terx`
 2006-10-04 20:04
#70479 #70479
User since
2005-08-23
6 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=docsnyder,04.10.2006, 14:41]Warum ein Aufruf mit Pipe?

Warum nicht einfach so?:

Code: (dl )
test.pl blah.txt


Gruß, Doc[/quote]
Weil das nicht Funktioniert.

Du rufst die test.pl mit einem Argument auf, STDIN bleibt trotzdem "leer"

Daher die Pipe...
lichtkind
 2006-10-04 20:21
#70480 #70480
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
CPAN:Term::ReadKey ??
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Linuxer
 2006-10-04 22:59
#70481 #70481
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Hi,

folgender Code arbeitet anstandslos unter Linux. Die Meldung scheint mir WinDOS-spezifisch.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl
# vi:ts=4 sw=4 et:
use strict;
use warnings;

binmode(STDIN);
binmode(STDOUT);

my $char = '';

while ( $char = getc(STDIN) ) {
print ord( $char ), $/;
}


Aber wofür soll denn eigentlich STDOUT auf binmode geschaltet werden? Der Ausgabetext (vom Beispielscript) ist doch simpler ASCII-Text?

Mehr kann ich aktuell nicht testen mangels WinDOS (und tieferer Kenntnis in WinDOS, was Pipes und andere Systeminterna angeht).

Vielleicht bieten perlipc und/oder perlportnoch Infos dazu?


@Lichtkind
Überarbeite mal Deinen CPAN-Link; Term::RedKey gibt's nicht ;o)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
esskar
 2006-10-04 23:42
#70482 #70482
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
versuch es mal so

Code: (dl )
test.pl > blah.txt
docsnyder
 2006-10-05 00:50
#70483 #70483
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
Richtig esskar (hatte ich übersehen): SEA schreibt ja,

Quote
Ich möchte die ASCII-Nummern der eingegebenen Zeichen ausgeben.

... der "eingegebenen", also STDIN! Klar!

Dann natürlich so wie Du es vorschlägst:

Code: (dl )
test.pl > blah.txt

... ich schliesse mich dem Vorschlag von esskar an.

Gruß, Doc
Linuxer
 2006-10-05 02:21
#70484 #70484
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
[quote=docsnyder,04.10.2006, 22:50]
Code: (dl )
test.pl > blah.txt

... ich schliesse mich dem Vorschlag von esskar an.

Gruß, Doc[/quote]
Hi,

ich mag mich irren, aber mit
Code: (dl )
test.pl > blah.txt
überschreibt ihr eine bestehende blah.txt durch die Ausgabe von test.pl.

Meint ihr nicht eher?
Code: (dl )
test.pl < blah.txt
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
esskar
 2006-10-05 09:25
#70485 #70485
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Linuxer,05.10.2006, 00:21]Meint ihr nicht eher?
Code: (dl )
test.pl < blah.txt
[/quote]
ja, klar. :)
SEA
 2006-10-06 20:40
#70486 #70486
User since
2006-10-06
6 Artikel
BenutzerIn
[default_avatar]
Vielen Dank ersteinmal für die Antworten! :-)

Stimmt ja, anstatt "type blah.txt | test.pl" kann man natürlich auch "test.pl < blah.txt" schreiben.
Warum einfach wenns auch kompliziert geht?! :-P

"binmode(STDOUT);" ist natürlich erst einmal quatsch aber da soll später mal eine binäre Ausgabe hin ... :-)

Ich hab nu noch a bissle rumprobiert ...
Mit folgendem Ergebnis:

Zu Testzwecken hab ich das Perl-Script von "Linuxer" verwendet:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl
# vi:ts=4 sw=4 et:
use strict;
use warnings;

binmode(STDIN);
binmode(STDOUT);

my $char = '';

while ( $char = getc(STDIN) ) {
print ord( $char ), $/;
}


Wenn ich es unter Linux starte funktioniert alles problemlos (vielen Dank an Linus ;-)

Aber nun zu Windoof (muss leider sein ...):
1. wenn ich per Konsole "type blah.txt | test.pl" eingebe, erhalte ich weiterhin die Fehlermeldung:
"Ein Prozess hat versucht, zu einer nicht bestehenden Pipe zu schreiben."
2. wenn ich per Konsole "test.pl < blah.txt" starte, erhalte ich keine Ausgabe!!!

Deshalb schlußfolgere ich, dass es mit dem Windoof-Perl zusammen hängen muss ... (Windoof selbst will ich da mal nich ausschließen ;-)

Kann mir damit jemand helfen?! Hab damit wenig Erfahrung (eher keine ;-)
Ich hab dieses Perl installiert: ActivePerl-5.8.8.819-MSWin32-x86-267479

MfG Stefan
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2006-10-04 16:00.