Larsiboy: Ersetzen

Hallo ;
Bin weiter es geht , die werte werden ersetzt aber ich möchte doch , dass die werte nicht vorgegeben sind .
Wie soll ich das machen ?

my $line;
my $beschreibung = ' ';
my $bild = ' ';
my $bild2 = ' ';
my $repeat_auktion = ' ';
my $alias = ' ';
my $artikelname = ' ';
my $auktionsende = ' ';
my $mindestgebot = ' ';
my $aktuelles_gebot = ' ';
my $steigerung = ' ';
my $zahlung = ' ';
my $versand = ' ';

open FILE,"<t_artikel.htm" or die "artikel.htm: $!";
print header();
while (defined ($line=<FILE>)) {
  $line=~s/[BILD]/$bild/ge;
  $line=~s/[2BILD]/$bild2/ge;
  $line=~s/[BESCHREIBUNG]/$beschreibung/ge;
  $line=~s/[REPEAT_AUKTION]/$repeat_auktion/ge;
  $line=~s/[ALIAS]/$alias/ge;
  $line=~s/[ARTIKELNAME]/$artikelname/ge;
  $line=~s/[AUKTIONSENDE]/$auktionsende/ge;
  $line=~s/[MINDESTGEBOT]/$mindestgebot/ge;
  $line=~s/[AKTUELLES_GEBOT]/$aktuelles_gebot/ge;
  $line=~s/[STEIGERUNG]/$steigerung/ge;
  $line=~s/[ZAHLUNG]/$zahlung/ge;
  $line=~s/[VERSAND]/$versand/ge;
  print $line;
}
close FILE;

Es heißt zum Beispiel $alias manchmal 123 oder 321 .
cu ;

  1. Hi,

    Bin weiter es geht , die werte werden ersetzt aber ich möchte doch , dass die werte nicht vorgegeben sind .
    Wie soll ich das machen ?

    was meinst du mit "nicht vorgegeben" ?

    my $line;
    my $beschreibung = ' ';
    my $bild = ' ';
    my $bild2 = ' ';
    my $repeat_auktion = ' ';
    my $alias = ' ';
    my $artikelname = ' ';
    my $auktionsende = ' ';
    my $mindestgebot = ' ';
    my $aktuelles_gebot = ' ';
    my $steigerung = ' ';
    my $zahlung = ' ';
    my $versand = ' ';

    Die Variablen sind jetzt mit einem Leerzeichen gefüllt. Es genügt zB my $versand = ''; oder willst du das so ?

    open FILE,"<t_artikel.htm" or die "artikel.htm: $!";
    print header();
    while (defined ($line=<FILE>)) {
      $line=~s/[BILD]/$bild/ge;
      $line=~s/[2BILD]/$bild2/ge;
      $line=~s/[BESCHREIBUNG]/$beschreibung/ge;
      $line=~s/[REPEAT_AUKTION]/$repeat_auktion/ge;
      $line=~s/[ALIAS]/$alias/ge;
      $line=~s/[ARTIKELNAME]/$artikelname/ge;
      $line=~s/[AUKTIONSENDE]/$auktionsende/ge;
      $line=~s/[MINDESTGEBOT]/$mindestgebot/ge;
      $line=~s/[AKTUELLES_GEBOT]/$aktuelles_gebot/ge;
      $line=~s/[STEIGERUNG]/$steigerung/ge;
      $line=~s/[ZAHLUNG]/$zahlung/ge;
      $line=~s/[VERSAND]/$versand/ge;
      print $line;
    }
    close FILE;

    $xNeTworKx.

    1. Hi,

      Bin weiter es geht , die werte werden ersetzt aber ich möchte doch , dass die werte nicht vorgegeben sind .
      Wie soll ich das machen ?

      was meinst du mit "nicht vorgegeben" ?

      my $line;
      my $beschreibung = ' ';
      my $bild = ' ';
      my $bild2 = ' ';
      my $repeat_auktion = ' ';
      my $alias = ' ';
      my $artikelname = ' ';
      my $auktionsende = ' ';
      my $mindestgebot = ' ';
      my $aktuelles_gebot = ' ';
      my $steigerung = ' ';
      my $zahlung = ' ';
      my $versand = ' ';

      Die Variablen sind jetzt mit einem Leerzeichen gefüllt. Es genügt zB my $versand = ''; oder willst du das so ?

      open FILE,"<t_artikel.htm" or die "artikel.htm: $!";
      print header();
      while (defined ($line=<FILE>)) {
        $line=~s/[BILD]/$bild/ge;
        $line=~s/[2BILD]/$bild2/ge;
        $line=~s/[BESCHREIBUNG]/$beschreibung/ge;
        $line=~s/[REPEAT_AUKTION]/$repeat_auktion/ge;
        $line=~s/[ALIAS]/$alias/ge;
        $line=~s/[ARTIKELNAME]/$artikelname/ge;
        $line=~s/[AUKTIONSENDE]/$auktionsende/ge;
        $line=~s/[MINDESTGEBOT]/$mindestgebot/ge;
        $line=~s/[AKTUELLES_GEBOT]/$aktuelles_gebot/ge;
        $line=~s/[STEIGERUNG]/$steigerung/ge;
        $line=~s/[ZAHLUNG]/$zahlung/ge;
        $line=~s/[VERSAND]/$versand/ge;
        print $line;
      }
      close FILE;

      $xNeTworKx.

      Also nochmal jetzt ist der wert fest vorgegeben , aber ich will das  zum Beispiel [ALIAS] durch $alias ersetzt wird .
      Der wert von alias kommt über den aufruf /fff.pl?alias=Daniel

      Ok ?
      Cu ; Lars

      1. Hi,

        Also nochmal jetzt ist der wert fest vorgegeben , aber ich will das  zum Beispiel [ALIAS] durch $alias ersetzt wird .
        Der wert von alias kommt über den aufruf /fff.pl?alias=Daniel

        Achso jetzt verstehe ich. Dann musst du CGI verwenden.

        #!/usr/bin/perl -w

        use strict;
        use CGI;

        my $query = new CGI;
        my $alias = $query->param('alias');

        print $query->header;
        print "Ausgabe von alias = $alias\n";

        $xNeTworKx.

  2. use Mosche;

    Den Tip mit CGI hast du bereits bekommen, vielleicht hier einige Verbesserungen:

    Gerade wenn du sehr viele Template-Parameter hast, wird dein Quellcode sehr unübersichtlich. Verwende dann besser einen Hash.
    Lasse alle Parameter, die du bekommst (also zB /cgi-bin/dein_cgi.pl?alias=blah) mit einem fest definierten Wert beginnen:
    /cgi-bin/dein_cgi.pl?t_alias=blah&t_name=daniel&...

    Dann füllst du einen Hash mit deinen Template-Parametern:
    my $prefix = 't_'; # der Prefix, den du deinen Parametern gibst (um sie von nicht Template-Parametern zu unterscheiden.

    my %hash = map { ($_ =~ /^$prefix/) ? (substr($_, length($prefix)), param($_)) : ()} param();

    Das sieht ziemlich kompliziert aus, deswegen erkläre ich es hier ausführlich:

    Die Funktion map ist etwas ähnliches wie eine for-Schleife, nur das sie eine Liste als Parameter erhält und auch eine zurückgibt. Der Code sieht in der Langform so aus

    my $prefix = 't_';
    my %hash;
    foreach (param()) {

    diese Schleife läuft über alle Parameternamen,

    die dein Script bekommt

    if (/^$prefix/){
       # das if prüft hier, ob der aktuelle Parametername
       # wirklich mit deinem Prefix beginnt (und damit zu
       # deinen Template-Variablen gehört)

    # jetzt schneiden wir das Prefix ab
       my $name = substr($_, length(%prefix));

    # und jetzt fügen wir den Template- Parameter mit
       # Wert in den Hash ein
       $hash{$name} = param($_);
       }
    }

    Wenn du das hast, kannst du deine Template-ersetzung vereinfachen:

    open FILE,"<t_artikel.htm" or die "artikel.htm: $!";

    print header();

    Ich sehe, dass du bereits das CGI-Modul benutzt, deswegen vergiss nicht, auch die Funktion param() zu importieren (ist bereits getan, wenn du das Symbol ':standard' importierst.

    Wenn du sowieso alle Zeilen gleich danach ausgibst, spar dir den Umweg, die Datei zeilenweise einzulesen:

    $/ = undef;

    my $file = <FH>;
    $file =~ s/[(.*?)]/$hash{$1}/g;
    print $file;

    Dann brauchst du die Schleife nicht mehr.

    close FILE;

    Wenn du Standard-werte setzen willst, solltest du diese vor dem Auslesen der Parameter in den Hash einfügen.

    Hier nochmals die komplette Datei (ausgetestet):
    ########################
    #!/usr/bin/perl -w

    use strict;
    use CGI qw(param header);

    print header();

    my $tmpl_prefix = 't_';
    my $tmpl_file  = '/web/test/htdocs/template.html';
    my %tmpl_values = map { ($_ =~ /^$tmpl_prefix/) ? (substr($_, length($tmpl_prefix)), param($_)) : ()} param();

    $/ = undef;
    open(FH, $tmpl_file) or die "Kann $tmpl_file nicht öffnen: $!";

    Datei einlesen

    my $file = <FH>;

    Template-Parameter ersetzen

    $file =~ s/[(.*?)]/$tmpl_values{$1}/g;

    Datei ausgeben

    print $file;

    close(FH);

    ###########################

    Ich hoffe, du kannst damit etwas anfangen...

    use Tschoe qw(Matti);