Glen: Datei einlesen und Zeileumbruch entfernen

Hi,
ich möchte eine HTML-Datei einlesen und dabei alle Zeilenumbrüche durch einen Tabulator oder auch # ersetzen. Also die alle Zeilen in eine einzige Zeile schreiben.
Wie könnte ich das am besten realisieren.
Besten Dank schonmal.
Gruß
Glen

  1. Hallo Glen.

    ich möchte eine HTML-Datei einlesen und dabei alle Zeilenumbrüche durch einen Tabulator oder auch # ersetzen. Also die alle Zeilen in eine einzige Zeile schreiben.

    Entweder du entfernst die Zeilenumbrüche aus allen Zeilen mit chomp:
    http://de.selfhtml.org/cgiperl/funktionen/zeichenketten.htm#chomp

    und fügst sie danach mit join zusammen:
    http://de.selfhtml.org/cgiperl/funktionen/listenhashes.htm#join

    oder du machst es mit Hilfe Regulärer Ausdrücke:
    http://de.selfhtml.org/cgiperl/sprache/regexpr.htm#suchen_ersetzen

    Freundschaft!
    Siechfred

    --
    Punk's not dead: http://www.siechfreds-welt.de/badreligion.shtml
    Dankbarkeit, man spürt sie ja so selten bei den Menschen, und gerade die Dankbarsten finden nicht den Ausdruck dafür, sie schweigen verwirrt, sie schämen sich und tun manchmal stockig, um ihr Gefühl zu verbergen. (Stefan Zweig)
    1. Hi,
      ich hab meinen Code jetzt mal so geändert. Funzt leider noch nicht so ganz. Was mache ich denn noch falsch?
      Gruß
      Glen

      #!/usr/local/bin/perl

      use strict;

      HTML-Dateien öffnen, ändern und speichern

      my $datei_dir ="/data/daten/ib_test";
      my $dateineu_dir ="/data/daten/ib_test/Dateien_neu";

      Einlesen

      opendir(DIR, $datei_dir) or die "Fehler bei opendir: $!\n";
      while(my $datei=readdir(DIR))
      {
       print "$datei\n";
       if($datei=~m/.+.html*$/)
       {
        open(DATEI, "<$datei_dir/$datei") || die "Fehler bei open(< $datei): $!\n";
         my @zeile =<DATEI>;
         close(DATEI);

      # Manipulieren
         my $datei = join @zeile
         $datei =~ s/\n/\t/g;

      # Schreiben
         open(DATEI,">$datei") || die $! "chmod vergessen?";
         print DATEI "$datei";
         close(DATEI);

      }
      close(DIR);

      1. Hallo Glen,

        Tausche den Inhalt der inneren Schleife durch das folgende aus:

        local $/;
           open DATEI, '<',"$datei_dir/$datei" or die "Fehler bei open(< $datei): $!\n";
           my $datei = <DATEI>
           close DATEI;

        $datei =~ s/\015\012|\015|\012/\t/g;

        open DATEI,'>',"$datei_dir/$datei" or die "$datei: $!";
           print DATEI $datei;
           close DATEI;

        So sollte es gehen.

        Grüße,
         CK

        --
        [remote-signature:http://www.defunced.de/cgi-bin/signature.pl]
        http://wwwtech.de/
        1. Hallo Christian,
          jetzt sieht mein Code so aus. Etwas stimmt aber leider immer noch nicht. Was mache ich denn jetzt noch falsch?
          Gruß
          Glen

          #!/usr/local/bin/perl

          use strict;

          HTML-Dateien öffnen, ändern und speichern

          my $datei_dir ="/data/daten/ib_test";
          my $dateineu_dir ="/data/daten/ib_test/Dateien_neu";

          Einlesen

          opendir(DIR, $datei_dir) or die "Fehler bei opendir: $!\n";
          while(my $datei=readdir(DIR))
          {
           print "$datei\n";
           if($datei=~m/.+.html*$/)
           {
            local $/;
             open DATEI, '<',"$datei_dir/$datei" or die "Fehler bei open(< $datei): $!\n";
             my $datei = <DATEI>
             close DATEI;

          $datei =~ s/\015\012|\015|\012/\t/g;

          open DATEI,'>',"$datei_dir/$datei" or die "$datei: $!";
             print DATEI $datei;
             close DATEI;
           }
          }
          close(DIR);

          1. Hallo Glen,

            jetzt sieht mein Code so aus. Etwas stimmt aber leider immer noch
            nicht. Was mache ich denn jetzt noch falsch?

            Was sind denn die Meldungen?

            Wahrscheinlich meinst du auch $dateineu_dir beim zweiten, schreibenden
            oeffnen der Datei.

            Grüße,
             CK

            --
            [remote-signature:http://www.defunced.de/cgi-bin/signature.pl]
            http://wwwtech.de/
            1. Hallo,
              jetzt hab ich's dann doch noch mit Eurer Hilfe geschaft :)
              Vielen Dank nochmal!
              Gruß
              Glen

          2. if($datei=~m/.+.html*$/)
             {
              local $/;
               open DATEI, '<',"$datei_dir/$datei" or die "Fehler bei open(< $datei): $!\n";
               my $datei = <DATEI>
               close DATEI;

            $datei =~ s/\015\012|\015|\012/\t/g;

            open DATEI,'>',"$datei_dir/$datei" or die "$datei: $!";
               print DATEI $datei;
               close DATEI;

            Naja, hier sind ein paar viele "$datei"s vorhanden.

            Struppi.

  2. #!/usr/bin/perl -wT

    progi ohne Gewehr,

    script als ASCII uploaden,

    ausführliche errors stehen in der errorlog

    use CGI::Carp qw(fatalsToBrowser);
    use strict ;

    my $file = 'home/deinedomain/html/';
    #pfad zum file eingeben, file muss chmod 666 kürzfristig gesetzt werden

    Einlesen

    open(FILE,"$file") or die $! "pfad ok?";
    my @main = <FILE>;
    close(FILE);

    Manipulieren

    my $chunk = join @main;
    $chunk =~ s/<(br|BR)>/\t/g;

    $chunk =~ s/\n/\t/g;  # passendes aussuchen

    $chunk =~ s/\n/#/g;

    $chunk =~ s/<(br|BR)>/#/g;

    $chunk =~ s/Tante Olga/Beat/g;

    Schreiben

    open(FILE,">$file") or die $! "chmod vergessen?";
    print FILE $chunk;
    close(FILE);

    print "Content-type: text/html\n\n";
    print "<html><body>";
    print "<p>Tante Olga war da !<br> damit keine ir(r ?)itierende "premature end of script header" message erscheint</p>";
    print "</body></html>";

    exit ;

    profs können das noch 10mal kürzer/schöner/eleganter/besser