Re: while-schleife und einschränkung der ausgabenanzahl - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von hempelr (1976 Beiträge) am Mittwoch, 18.Februar.2004, 13:13.
    Re: while-schleife und einschränkung der ausgabenanzahl

      Das ist m.E. nicht ganz so einfach - vor allem weil die range-Vars dann nicht mehr stimmen.
      Ich würde das vielleicht so ähnlich wie folgt machen:
      - einen Zähler mitlaufen lassen wieviel Datensätze tatsächlich ausgegeben wurden
      - einen zweiten Zähler laufen lassen für die verworfenen Doubletten
      - wenn die Anzahl der ausgegebenen DS gleich deiner Vorgabanzahl ist, werden beide Zähler addiert und $_range auf diesen Wert für den nächsten Durchlauf gesetzt - gleichzeitig wird die while_get_next-Schleife "gewaltsam" verlassen.

      Die Blätterlinks sind etwas komplizierter - auf alle Fälle ist es nicht möglich, eine Art Bereichsregister zu bauen, da ja nicht klar ist, wieviel Doubletten in jedem Bereich sind. Für vor-zurück langt m.E. das zwischenspeichern des aktuellen und vorigen $_range-Wertes (hab ich aber jetzt nicht fertig durchdacht...). Wiegross du $_range_length ansetzt ist abhängig davon, wie das Verhältnis von Doubletten im Anzeigebereich ist.

      mal vom Prinzip (not testet!!!)
      ----scnipp
      <perl>
      $ra ||= 0; $ra_l ||= 20;
      $gibaus = 5;
      my $vergleich = "";
      get "Feld=* range=$ra,$ra_l", "db";
      while(get_next("db")){
        if($Feld ne $vergleich){
          $dbwerte .= "Wert = $Feld<br>"; # speichern, damit Blätterlinks oberhalb ausgegeben werden können
          $vergleich = $Feld;
          $cnt_ausgabe++;
        } else {
        $cnt_doublette++;
        }# E if/else vergleich
        if ($cnt_ausgabe >= $gibaus){
        $oldra = $ra;
        $newra = $cnt_ausgabe + $cnt_doublette;
        last
        } # E if cnt_ausgabe
      } # E while_get_next
      

      $l_zurueck = "<a href=$_link&ra=$oldra>zurück</a>";
      $l_vor = "<a href=$_link&ra=$newra>vor</a>";
      

      out<<EOF;
      $l_zurück - $l_vor<br>
      <hr>
      $dbwerte
      <hr>
      EOF
      </perl>
      
      ---schnapp
      Hoffe, es hilft dir weiter

      Ruben


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von andreas (0 Beiträge) am Mittwoch, 18.Februar.2004, 12:05.
    while-schleife und einschränkung der ausgabenanzahl

      Ich habe folgendes Problem und komme mit meinen stark beschränkten Perl-Kenntnissen nicht mehr richtig weiter:

      möchte aus einer db Datensätze mit get / get_next ausgeben und gleichzeitig doppelte Einträge unterdrücken:

      <perl>
      my $vergleich = "";
      get "Feld=*", "db";
      while(get_next("db")) 
      {
        if($Feld ne $vergleich) 
        {
          out "Wert= ",$Feld;
          $vergleich = $Feld;
        } 
        else 
        {
        # keine Aktion
        }
      }
      </perl>
      

      nun möchte ich aber die Anzahl der Durchläufe auf z.B. 5 begrenzen und die restlichen Einträge über eine Blätterfunktion anzeigen lassen. Soweit ich die Beispiele in der Doku oder Bibo richtig verstehe laufen die nur mit der "range="-Eingrenzung. Kann man also für die while-schleife das "range" o.ä. verwenden oder muss man das irgendwie über eine for-Schleife lösen?

      andreas

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Mittwoch, 18.Februar.2004, 13:13.
    Re: while-schleife und einschränkung der ausgabenanzahl

      Das ist m.E. nicht ganz so einfach - vor allem weil die range-Vars dann nicht mehr stimmen.
      Ich würde das vielleicht so ähnlich wie folgt machen:
      - einen Zähler mitlaufen lassen wieviel Datensätze tatsächlich ausgegeben wurden
      - einen zweiten Zähler laufen lassen für die verworfenen Doubletten
      - wenn die Anzahl der ausgegebenen DS gleich deiner Vorgabanzahl ist, werden beide Zähler addiert und $_range auf diesen Wert für den nächsten Durchlauf gesetzt - gleichzeitig wird die while_get_next-Schleife "gewaltsam" verlassen.

      Die Blätterlinks sind etwas komplizierter - auf alle Fälle ist es nicht möglich, eine Art Bereichsregister zu bauen, da ja nicht klar ist, wieviel Doubletten in jedem Bereich sind. Für vor-zurück langt m.E. das zwischenspeichern des aktuellen und vorigen $_range-Wertes (hab ich aber jetzt nicht fertig durchdacht...). Wiegross du $_range_length ansetzt ist abhängig davon, wie das Verhältnis von Doubletten im Anzeigebereich ist.

      mal vom Prinzip (not testet!!!)
      ----scnipp
      <perl>
      $ra ||= 0; $ra_l ||= 20;
      $gibaus = 5;
      my $vergleich = "";
      get "Feld=* range=$ra,$ra_l", "db";
      while(get_next("db")){
        if($Feld ne $vergleich){
          $dbwerte .= "Wert = $Feld<br>"; # speichern, damit Blätterlinks oberhalb ausgegeben werden können
          $vergleich = $Feld;
          $cnt_ausgabe++;
        } else {
        $cnt_doublette++;
        }# E if/else vergleich
        if ($cnt_ausgabe >= $gibaus){
        $oldra = $ra;
        $newra = $cnt_ausgabe + $cnt_doublette;
        last
        } # E if cnt_ausgabe
      } # E while_get_next
      

      $l_zurueck = "<a href=$_link&ra=$oldra>zurück</a>";
      $l_vor = "<a href=$_link&ra=$newra>vor</a>";
      

      out<<EOF;
      $l_zurück - $l_vor<br>
      <hr>
      $dbwerte
      <hr>
      EOF
      </perl>
      
      ---schnapp
      Hoffe, es hilft dir weiter

      Ruben

     Antworten

    Beitrag von andreas (0 Beiträge) am Mittwoch, 18.Februar.2004, 13:48.
    Re: while-schleife und einschränkung der ausgabenanzahl

      erstmal vielen dank, ruben.

      werde über erfolge/misserfolge berichten

      andreas

     Antworten


     
 Liste der Einträge von 31800 bis 31950:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.09s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!