Markus Banach: mit perl zu html

Liebes Forum,

ist jemanden von Ihnen ein gutes Perl Skript bekannt, welches
in ASCII codierte Dateien als Input nimmt und diese in HTML
formatiert ?

Vielen Dank für Ihre Aufmerksamkeit.

Ich freue mich auf Ihre Antworten !

Markus Banach

  1. Leider weiss ich kein entsprechendes Perlscript.
    Aber eigentlich sollte es kein Problem sein sowas selbst zu programmieren.

    Da Perl ueber regular expressions verfuegt ist das wirklich keine Hexerei.

    Christian Ploninger
    PS: Interessant waere vielleicht welche Formatierungen beruecksichtigt werden sollen. (oder sollte ein einfaches Ersetzten den "\n" durch "<BR>"s reichen?
    Dann mueste man nur noch den HTML-Overhead dazu haengen. (<HTML>-Tag und so)

  2. Hallo Christian

    ist jemanden von Ihnen ein gutes Perl Skript bekannt, welches
    in ASCII codierte Dateien als Input nimmt und diese in HTML
    formatiert ?

    Ich weiss nicht so recht, was dabei rauskommen soll. Was gibt es denn bei einer Textdatei zu formatieren, abgesehen vom Ersetzen der Linefeeds durch <BR>? Und das ist auch nicht noetig, denn wenn Du eine Textdatei vom Websurfer abrufst, so wird der normalerweise den MIME-Type text/plain mitsenden (anstatt text/html fuer normale Seiten). Daraufhin wird der Browser die Textdatei vernuenftig darstellen und nicht mehr Linefeeds als Leerzeichen interpretieren.

    Oder habe ich da jetzt was falsch verstanden?

    Bye by Calocybe

    1. Hallo Calocybe!

      Arghhhh...... ich schreibe eine ganze Litane und du "klaust" mir das ganze und ersetzt es mit was anderem! ;-)

      Das hat uns (MICH) der Froumscript-teufel voll erwischt!

      Was soll's ich schreibe es halt nochmal.

      Grüße
      Thomas

      1. Hallo Thomas!

        Arghhhh...... ich schreibe eine ganze Litane und du "klaust" mir das ganze und ersetzt es mit was anderem! ;-)

        Oops, I'm sooooooooo sorry!!!!  *schaem*   ;-)
        Na, ich sollte eh nicht hier rumsurfen, hab ich doch zu Ehren meines Arbeitgebers noch einen ganzen Haufen zu tun, also verschwind' ich jetzt wieder. ;-)

        Bye by Calocybe

  3. Hallo Markus Banach!

    Man braucht dazu eine ASCII-Tabelle und muß dann mit dem Suchen/Ersetzen-Befehl (~s) von PERL die DOS-Codes in ANSI-Codes (Windows, HTML, etc...) übersetzen.
    Beispielhaft ist dies hier am Buchstaben ä erklärt, der den Wert 132 besitzt. 132 ist in hexadezimaler Schreibweise 84 (Start->Ausführen->Calc   diese Software kann umrechnen)

    Kopiere Dir einfache die Zeile mehrmals, und tausche die ensprechenden Codes aus!
    Eventuell mußt Du auch noch die Zeilenschaltung (Codes 13 und 10) durch <BR> (also 13 durch nichts und 10 durch <BR>) ersetzen.

    Leider habe ich keine ASCII-Tabelle vorliegen, aber der Code sollte nun leicht anzupassen sein:

    #!/usr/bin/perl
    print "Content-type: text/html\n\n ";
    open(LOGFILE, "<asc2html.txt"); @text = <LOGFILE>; close LOGFILE;

    foreach $line (@text)
    {
      $line=~ s/\x84/ä/g;   #Dies ist die ausschlaggebende Zeile !!!
      print $line;
    };

    Gruß

    Christian Schnagl

  4. Hallo Markus

    ist jemanden von Ihnen ein gutes Perl Skript bekannt, welches
    in ASCII codierte Dateien als Input nimmt und diese in HTML
    formatiert ?

    Ich wuerde es so machen:

    #!Perl

    $InputFile = "/irgend/ein/pfad/mit/datei.txt";
    $OutputFile = "/irgend/ein/pfad/mit/datei.htm";
    $title = "Irgendein netter Titel";

    open(TXT,"<$InputFile");
    @txt = <TXT>;
    close(TXT);
    foreach(@txt) {
    $_ =~ s/ä/&ä/g;
    $_ =~ s/ö/&ö/g;
    $_ =~ s/ä/&ü/g;
    $_ =~ s/Ä/&Ä/g;
    $_ =~ s/Ö/&Ö/g;
    $_ =~ s/Ü/&Ü/g;
    $_ =~ s/ä/&ä/g;
    $_ =~ s/ß/&ß/g;
    $_ =~ s/&/&&/g;
    $_ =~ s/"/&"/g;
    $_ =~ s/</&</g;
    $_ =~ s/>/&>/g;
    }

    $htm[0] = "<html><head><title>$title</title></head><body><pre>";
    foreach(@txt) {
      push(@htm,$_);
    }
    push(@htm,"</pre></body></html>");
    open(HTM,">$OutputFile");
    print HTM @htm;
    close(HTM);

    Tja, aber wahrscheinlich ist das fuer einen echten Perl-Hacker wieder mal viel zu simpel <g>.

    viele Gruesse
      Stefan Muenz

    1. Ach, dieser Mist mit den Entities, also noch mal:

      foreach(@txt) {

      »»  $_ =~ s/ä/ä/g;
      »»  $_ =~ s/ö/ö/g;
      »»  $_ =~ s/ä/ü/g;
      »»  $_ =~ s/Ä/&Auml;/g;
      »»  $_ =~ s/Ö/&Ouml;/g;
      »»  $_ =~ s/Ü/&Uuml;/g;
      »»  $_ =~ s/ß/ß/g;
      »»  $_ =~ s/&/&/g;
      »»  $_ =~ s/"/"/g;
      »»  $_ =~ s/</</g;
      »»  $_ =~ s/>/>/g;

      }

      Stefan Muenz

      1. Hallo Stefan,

        ich möchte den Meister ja nicht anzweifeln, aber Dein Vorschlag

        »»  $_ =~ s/ä/ä/g;

        ersetzt zwar normale Texte, die mit Windows-Notepad o.ä. geschrieben wurden in W3C-konforme Schreibweise, aber das Problem mit den DOS-Umlauten wird dadurch nicht gelöst !!!

        Schreib mal einfach eine Datei (mit Umlauten) mit EDIT und speichere Sie ab. Das Script ersetzt keinen einzigen Umlaut, da der "Such-Ausdruck" nicht gefunden wird.

        Gruß
        Christian Schnagl

        1. Hallo Christian

          ich möchte den Meister ja nicht anzweifeln, aber Dein Vorschlag

          »»  $_ =~ s/ä/ä/g;

          ersetzt zwar normale Texte, die mit Windows-Notepad o.ä. geschrieben wurden in W3C-konforme Schreibweise, aber das Problem mit den DOS-Umlauten wird dadurch nicht gelöst !!!

          Da hast Du schon recht. Aber man kann auch sagen, schreibe das Script im DOS-Editor, dann werden die Texte vom Windows-Notepad nicht richtig konvertiert. Das Problem mit den Zeichensaetzen wirst Du nicht so leicht los. Man muss wirklich dazusagen, mit welchem Zeichensatz das Perlscript geschrieben wurde. Nur fuer diesen wird es funktionieren. Will man das universeller halten, dann bleibt nur die Moeglichkeit, nicht die zu ersetzenden Buchstaben im Quellcode anzugeben, sondern deren Zeichencodes (also die Zahlen), und zwar fuer jeden vom Script unterstuetzten Zeichensatz. Welcher benutzt werden soll, musst Du dann als Kommandozeilenparameter angeben. Tja, so ginge es, aber man kann natuerlich auch ueber's Ziel hinausschiessen. Man koennte ja auch einfach den verwendeten Zeichensatz in einem META-Tag angeben.

          Bye by Calocybe