Schrift
[thread]6542[/thread]

Problem bei Ausgabe auf Drucker

Leser: 2


<< >> 6 Einträge, 1 Seite
Kean
 2004-08-29 21:45
#49686 #49686
User since
2004-08-18
463 Artikel
BenutzerIn

user image
Ich habe ein Script geschrieben welches einen Bondrucker ansteuert. Das funktioniert auch wunderbar. Jetzt wollte ich die Maske für die Bons in eine Datei auslagern. Ich habe bisher immer print "\012"; benutzt um einen Linefeed zu machen. Jetzt lese ich das \012 aus der Datei und er macht keinen Linefeed sondern druckt das \012 auf den Bon. Wie kann ich wenn ich die Formatierung aus der Datei in eine Variable lese Perl sagen das er den Text aus der Variable noch interpretieren soll und nicht einfach ausdrucken???
coax
 2004-08-29 22:19
#49687 #49687
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
Wenn du statt \012 mit
Code: (dl )
1
2
3
print "\n";
oder
print "\012";

(d.h. durch die doppelten Anfuehrungszeichen interpoliert), ein "echten Linefeed" in die Datei schreiben wuerdest, haettest du dann auch beim Aauslesen ein "Echten".

Du koenntest aber auch alle \012 durch \n ersetzen.

Code: (dl )
$string =~ s~\\012~\n~gs;


Grusz coax.
,,Das perlt aber heute wieder...'' -- Dittsche
Kean
 2004-08-29 22:21
#49688 #49688
User since
2004-08-18
463 Artikel
BenutzerIn

user image
Das klappt bei den Linefeeds, aber nicht bei \033\151 für einen Full-Cut. Ich muss also die Variable irgendwie interpolieren beim ausgeben.
Dubu
 2004-08-29 22:23
#49689 #49689
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Das beste waere, gleich ein Newline statt des Codes in die Datei einzutragen, oder? ;)

Wenn das nicht geht, wirst du um ein eval() irgendwo nicht herum kommen. Zum Beispiel kannst du alle \nnn Sequenzen passend ersetzen:
Code: (dl )
$eingelesen =~ s/\\(\d{3})/chr oct($1)/eg;


Du koenntest auch in einer eval-Anweisung den aus der Datei ausgelesenen String zuweisen:
Code: (dl )
eval qq{\$str = "$eingelesen"};

Von der zweiten Variante moechte ich aber dringend abraten, da damit alles in $eingelesen evaluiert wird. Das kann nicht nur eine ziemliche Sicherheitsluecke darstellen, sondern auch so zu ueberraschenden Ergebnissen fuehren.
Kean
 2004-08-29 22:33
#49690 #49690
User since
2004-08-18
463 Artikel
BenutzerIn

user image
Mein Problem ist gelöst. Mit eval hats geklappt. Das Programm ist nicht sicherheitsrelevant.
Dubu
 2004-08-30 02:24
#49691 #49691
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Wie gesagt, es geht nicht nur um Sicherheit im Sinne von "crackersicher". Auch wenn dein Eingabetext irgendwo ein $ oder @ mit etwas dahinter enthaelt, wird das von Perl als Variable interpretiert!
<< >> 6 Einträge, 1 Seite



View all threads created 2004-08-29 21:45.