Anzeige:
Ergebnis 1 bis 1 von 1

Thema: Perl: Zeichenweises Lesen von /dev/ttyS0

  1. #1
    Registrierter Benutzer
    Registriert seit
    16.11.2005
    Beiträge
    11

    Perl: Zeichenweises Lesen von /dev/ttyS0

    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.
    PHP-Code:
    #!/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 ...

    PHP-Code:
    #!/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?
    Geändert von atomical (04-12-2005 um 21:09 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •