JohannesK: lwp::simple +Öffnen und verarbeiten einer Textdatei!

Hallo!

Habe ein großes Problem. Habe schon alles möglich ausprobiert aber es funktioniert nicht. Habe eine Funktion die eine Artikeltabelle auswirft. In dieser txt-Datei sind jeweils 3 Variablen von unterschiedlichen Artikeln eingeschrieben. Halt für ein online-shopsystem. Wenn ich die Datei lokal von meinem Server mit open... öffne klappt alles wunderbar. Wenn ich lwp::simple verwende wird nix angezeigt!Woran kann das liegen???? Bin verzweifelt... HELP!

MfG

Johannes

Hier der Quelltext:
------------------->>>>>>>>>>>>>>>>>>>>>>
#!/usr/bin/perl
use LWP::Simple;

sub format_Produkt
{
my($doc,$file);

$Inhalt='
<table border="0" cellpadding="1" cellspacing="1" width="100%">
<tr>
<td bgcolor="#E8EDF6"><strong>Nr.</strong></td>
<td bgcolor="#E8EDF6"><strong>Bezeichnung</strong></td>
<td bgcolor="#E8EDF6" align="right"><strong>Preis</strong></td>
</tr>'
;

$file = ("http://localhost/system/shop.txt");
 $doc = get($file);
 open(ART, "< $doc");
 while(<ART>)
    {
    chomp;
   ($Anummer,$Preis,$Artikel)=split(/\t/);

$Inhalt.=<<"...";
<tr>
<td>$Anummer</td>
<td>$Artikel</td>
<td align="right">$Preis</td>
</tr>
...

}

close(ART);

Schleifenende

$Inhalt.='</table></center></div>';

}

------------->>>>>>>>>>>>>

  1. Halihallo

    Habe ein großes Problem.

    haben wir das nicht alle :-))
    soll keine blöde Anspielung sein!

    Habe schon alles möglich ausprobiert aber es funktioniert nicht. Habe eine Funktion die eine Artikeltabelle auswirft. In dieser txt-Datei sind jeweils 3 Variablen von unterschiedlichen Artikeln eingeschrieben. Halt für ein online-shopsystem. Wenn ich die Datei lokal von meinem Server mit open... öffne klappt alles wunderbar. Wenn ich lwp::simple verwende wird nix angezeigt!Woran kann das liegen???? Bin verzweifelt... HELP!

    #!/usr/bin/perl
    use LWP::Simple;

    hier fehlt ein

    use strict

    :-)

    $file = ("http://localhost/system/shop.txt");
    $doc = get($file);

    gib hier mal $doc aus. Kommt überhaupt was an?

    test:

    if (&LWP::Simple::is_error) {
       print 'Fehler!!!';
    }

    werden die Funktionen per default exportiert??? - Versuch mal

    &LWP::Simple::get(...);

    OK, sonst käme ne Fehlermeldung...

    ---

    hatte mal das selbe Problem, dass ich auf alle INet-Adressen zugreifen konnte, ausser auf localhost, obwohl der Webserver lief. Weiss noch heute nicht wieso. Ich habe einfach kein Socket öffnen können; warum weiss ich nicht. Versuch einfach mal localhost auf 127.0.0.1 zu ändern. Vielleicht hilft das was.

    Viele Grüsse

    Philipp

    1. Hallo!

      Also erst mal Danke für deine Hilfe!

      Ich habe use strict;

      eingebunden.

      Mit print wird die txt-Datei auch auf dem Bildschrim angezeigt.
      Aber in der Tabelle steht nachher nix.

      Hiermit kann ich leider nix anfangen. Was meinst du damit???

      #werden die Funktionen per default exportiert??? - Versuch mal

      #&LWP::Simple::get(...);

      #OK, sonst käme ne Fehlermeldung...

      MfG

      Johannes

      1. Halihallo

        Mit print wird die txt-Datei auch auf dem Bildschrim angezeigt.
        Aber in der Tabelle steht nachher nix.

        Upsa. Michael hat natürlich völlig recht. $doc ist der ganze Inhalt des Dokumentes... Hab das Script wohl etwas schnell gelesen :-)

        $doc = get($file);
         while(split(/\n/, $doc))
            {
            chomp;
           ($Anummer,$Preis,$Artikel)=split(/\t/);
        $Inhalt.=<<"...";
        <tr>
        <td>$Anummer</td>
        <td>$Artikel</td>
        <td align="right">$Preis</td>
        </tr>
        ...
        }

        so muss es natürlich heissen.

        Viele Grüsse

        Philipp

        1. Halihallo

          Mit print wird die txt-Datei auch auf dem Bildschrim angezeigt.
          Aber in der Tabelle steht nachher nix.

          Upsa. Michael hat natürlich völlig recht. $doc ist der ganze Inhalt des Dokumentes... Hab das Script wohl etwas schnell gelesen :-)

          $doc = get($file);
          while(split(/\n/, $doc))
              {
              chomp;
             ($Anummer,$Preis,$Artikel)=split(/\t/);
          $Inhalt.=<<"...";
          <tr>
          <td>$Anummer</td>
          <td>$Artikel</td>
          <td align="right">$Preis</td>
          </tr>
          ...
          }

          Also wenn ich das so mache, dann hängt sich mein localhost auf. Im Taskmanager arbeitet Perl. Und der Browser reagiert kaum mehr. Hab ich was vergessen einzubinden. Der Pfad zur txt-Datei stimmt jedenfalls. Muss ich vielleicht doch ein open einbauen???

          MfG

          Johannes

          1. Halihallo

            Mit print wird die txt-Datei auch auf dem Bildschrim angezeigt.
            Aber in der Tabelle steht nachher nix.

            Upsa. Michael hat natürlich völlig recht. $doc ist der ganze Inhalt des Dokumentes... Hab das Script wohl etwas schnell gelesen :-)

            [...]

            Also wenn ich das so mache, dann hängt sich mein localhost auf.

            das liegt nicht an Perl, sondern am Webserver und sollte normalerweise nicht passieren... Starte mal den Computer neu, dann wird's wohl wieder funktionieren (Bei Win-Fehlern nützt ein Neustart zu 70% :-) ).

            Im Taskmanager arbeitet Perl. Und der Browser reagiert kaum mehr. Hab ich was vergessen einzubinden. Der Pfad zur txt-Datei stimmt jedenfalls. Muss ich vielleicht doch ein open einbauen???

            Nein, Michael hatte absolut recht: get gibt wirklich nur einen Scalar zurück, weder ein Handler noch irgendein Dateiname oder was du dir sonst noch alles denken magst/kannst... Es gibt einen reinen String zurück, den man weiterbearbeiten kann.
            Vielleicht kommt deine liebe zum open von php. In perl jedoch hat open gar nix mit Websites oder INet zu tun, sondern nur Dateien.
            Das Programm sollte so eigentlich funktionieren; zumindest sehe ich keinen anderen Fehler.
            Eben: versuch's mal mit Neustart.

            Viele Grüsse

            Philipp

            1. Hallo!

              So jetzt klappt es bei mir!!!

              Vielen Dank an alle, die mir geholfen haben!!!

              MfG

              Johannes

          2. Hallo,

            $doc = get($file);
            while(split(/\n/, $doc))
                {
                chomp;
            ...
            }

            Also wenn ich das so mache, dann hängt sich mein localhost auf.

            Was ich auch durchaus verstehen kann.
            split(/\n/, $doc) wird, sofern $doc nicht leer ist, immer etwas liefern, das als wahr interpretiert wird. Also wird die while()-Schleife nie beendet, der klassische Fall einer Endlosschleife. Ersetze es z.B. durch foreach(split(/\n/,$doc)).

            Außerdem ist das chomp in der Schleife unnötig, sofern Du $/ nicht manipuliert hast, da es ja nur $/ entfernt, welches mit \n vorbelegt ist.

            1. Halihallo

              $doc = get($file);
              while(split(/\n/, $doc))
                  {
                  chomp;
              ...
              }

              Also wenn ich das so mache, dann hängt sich mein localhost auf.

              Was ich auch durchaus verstehen kann.
              split(/\n/, $doc) wird, sofern $doc nicht leer ist, immer etwas liefern, das als wahr interpretiert wird. Also wird die while()-Schleife nie beendet, der klassische Fall einer Endlosschleife. Ersetze es z.B. durch foreach(split(/\n/,$doc)).

              Upsa :-)
              Vielleicht sollte ich mal mein Hirn einschalten. Das befindet sich im Moment anscheinend auf standby ;-)

              Viele Grüsse

              Philipp

  2. Hi,

    $file = ("http://localhost/system/shop.txt");
    $doc = get($file);
    open(ART, "< $doc");

    So funktioniert das nicht.

    "LWP::Simple::get()" ist kein Ersatz für "open()" -
    das ist ein Ersatz für Deine komplette Leseschleife.

    In "doc" befindet sich bereits der Inhalt des gesamten
    Dokuments - nicht etwa ein Dateiname oder so etwas.

    Viele Grüße
          Michael