PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl: Zeichenweises Lesen von /dev/ttyS0



atomical
04-12-2005, 20:54
Hallo!

Nachdem das Zerlegen in einzelne Datensätze so gut klappt (http://www.mrunix.de/forums/showthread.php?t=41868), hat sich jetzt plötzlich herausgestellt, das auch Daten gedruckt werden, die keinerlei Trennzeichen enthalten.

Da das Konvertieren der Zeichen mit Perl bereits wunderbar performant funktioniert, wollte ich gleich mit Perl zeichenweise von der seriellen Schnittstelle lesen, das gelesene Zeichen durch die Konvertierung und dann gleich auf den Drucker schicken.

Mein momentaner Ansatz scheitert offenbar daran, das er nicht wirklich zeichenweise liest - er schneidet alle Zeilen, auf die die if-then-next Anweisungen im Script passen, weg.

#!/usr/bin/perl

use strict;
use warnings;
use Getopt::Std;

# Standardwert fuer Zielport = /dev/lp0
my $Ausgabe = "/dev/lp0";
my $ascii;
my $max_ascii = 176;
my $zeichen;

# Parameter fuer Zielport einlesen und zuweisen
our ($opt_n);
getopts('n:') or die "Ungueltige Option!\n";
$Ausgabe = "$opt_n";

# gelesenen Zeichen verarbeiten und schreiben
while(<>)
{
$ascii = ord($_); # Zeichen in Zahl wandeln
print $ascii." ";
if ($ascii > $max_ascii){next;} # hohe Werte ignorieren
if (($ascii < 32) && (! ($ascii == 10))){next;} # Steuerzeichen rauswerfen
$zeichen=chr($ascii); # Zahl in Zeichen wandeln

open(FH,">>$Ausgabe");
print FH $_;
close(FH);
}


Das Beispiel, das ich bei SelfHTML gefunden habe, klappt leider auch nicht - es bricht irgendwann von sich aus ab ...


#!/usr/bin/perl

@Vokale = ("a","e","i","o","u");
@Anzahl = (0,0,0,0,0);
open(DATEI, "<$ARGV[0]") || die "$_[1] nicht gefunden\n";
while(($AktuellesZeichen = getc(DATEI)) ne "")
{
for($i=0;$i<=4;++$i)
{
if($AktuellesZeichen eq $Vokale[$i])
{
$Anzahl[$i]++;
}
}
}
close(DATEI);
for($i=0;$i<=4;++$i)
{
print "$Vokale[$i] kommt in $ARGV[0] isg. $Anzahl[$i] mal vor\n";
}


Was ich suche, ist eine Möglichkeit, ständig darauf zu warten, das ein Zeichen reinkommt ...

... any hints?