Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Stream auf nicht druckbare Zeichen filtern

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
atomical



Anmeldungsdatum: 12.01.2003
Beiträge: 93

BeitragVerfasst am: 06. Dez 2005 0:09   Titel: Stream auf nicht druckbare Zeichen filtern

Hallo!

Ich habe folgendes Problem:

Ein per RS232 angeschlossener Thermodrucker soll durch einen Nadeldrucker (Protokolldrucker) abgelöst werden. Die verschiedenen (unwichtigen) Formatierungsfunktionen des Thermodruckers werden durch diverse Steuerzeichen bzw. Zeichen jenseits des ASCII-Standards (Codetabelle unbekannt) ausgegeben. Direkt durchgereicht druckt der Nadeldrucker wild vorsich hin - allerdings nichts, was man lesen könnte.

Da am Ende sowieso nur der Text wichtig ist, soll jetzt alles andere (Steuerzeichen außer LF und alles jenseits ASCII) auf dem Weg von /dev/ttyS0 nach /dev/lp0 rausgeschmissen werden.

Mein selber gebasteltes Bashscript tut dies mit ordentlich CPU-Last dateiweise Zeile für Zeile ganz gut - das äquivalente Perl-Script kommt mit wesentlich weniger CPU-Zeit aus - allerdings auch nur zeilenweise - und genau da liegt das Problem - ich krieg es nicht hin, zeichenweise von /dev/ttyS0 zu lesen UND Zeiträume, in denen nichts kommt, ohne Probleme abzuwarten.

Konkret würde mich interessieren, ob und (wenn ja) wie ich mit Bash und/oder Perl zuverlässig ständig auf Zeichen aus der seriellen Schnittstelle warten und diese entsprechend in "Echtzeit" weiterverarbeiten kann - getc auf /dev/ttyS0 hab ich probiert - das bricht nach ein paar Sekunden Funkstille von sich aus ab ...

Alternaiv interessiert mich alles, was in die Richtung geht, einen Stream auf nichtdruckbare Zeichen zu filtern ...
_________________
mfg, atomical

Jabber: alext@jabber.ccc.de
 
Benutzer-Profile anzeigen Private Nachricht senden

jochen
prolinux-forum-admin


Anmeldungsdatum: 14.01.2000
Beiträge: 699
Wohnort: Jülich

BeitragVerfasst am: 06. Dez 2005 18:36   Titel:

Hi,

bei "Zeichen aus Stream filtern" denke ich immer direkt an tr. Ein erster Ansatz könnte wie folgt aussehen:
Code:
tr -d -c '[:print:][:space:]'
Da tr ein Filter ist, liest es aus stdin und schreibt nach stdout. "-d" steht für "delete", also löscht tr Zeichen aus dem Eingabestrom. Die angegebenen Zeichen sind die Zeichenklassen für druckbare Zeichen und Whitespace. Mit der Option "-c" (complement) werden diese Zeichen in Ruhe gelassen und alle andern, die nicht in diese Spezifikation passen, herausgefiltert.

Allerdings buffert tr zeilenweise - ist das OK für deinen Fall? Auch Umlaute und ß würde ich noch mal extra testen.

Ich hoffe, das hilft Dir etwas weiter.

Jochen
_________________
Die grösste Lüge der EDV? "Mal eben..."
 
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

atomical



Anmeldungsdatum: 12.01.2003
Beiträge: 93

BeitragVerfasst am: 06. Dez 2005 21:45   Titel:

Soweit so gut - ein
Code:
cat /dev/ttyS0 | tr -dc "\012 -~"
schreibt mir die gefilterten Daten in die aktuelle Konsole ...

Code:
cat /dev/ttyS0 | tr -dc "\012 -~" > /dev/lp0
oder auch
Code:
cat /dev/ttyS0 | tr -dc "\012 -~" > test.txt
wartet immer volle 4096 Byte ab und schreibt dann in die jeweilige Datei - sprich er würde nur alle 4kB drucken ...

Question

Hat jemand noch eine Idee?
_________________
mfg, atomical

Jabber: alext@jabber.ccc.de
 
Benutzer-Profile anzeigen Private Nachricht senden

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy