SNOWMAN Geschrieben 11. Januar 2005 Teilen Geschrieben 11. Januar 2005 Hi, hab n skript geschrieben das werte aus ner db ließt und ausgiebt. jetzt hab ich nur ein kleines problem, die einzelnen datensätze haben stark unterschiedliche längen (zwischen 4 und 40 zeichen). da es eine konsolenausgabe ist, ist diese sehr unüberischtlich. daher dachte ich dann, ich formatiere die strings mit sprintf. das sieht wie folgt aus: while( @row = $refcursor->fetchrow_array()){ $retval = $retval . sprintf("%-20s = %${row_len}s %s\n", $row[1], $row[4], $row[0]); } Nun ist mir aber aufgefallen dass das so nicht geht. Denn ich brauch alle Datensätze aus der Abfrage, muss die länge aller $row[4] Werte vergleichen und mir den großten speichern und dann zur $row_len machen. Das sieht dann so aus while($x <= $row){ #$x ist die Zählervariable und 0 if($row_len < length $row[4]){ $row_len = length $row[4]; } $x++; } Nun frage ich mich allerdings wie ich die beiden Stücke miteinander verbinde das es auch funktioniert. Hab da mal rumgespielt, das sieht dann wie folgt aus: while( @row = $refcursor->fetchrow_array()){ if($row_len < length $row[4]){ $row_len = length $row[4]; } $retval = $retval . sprintf("%-20s = %${row_len}s %s\n", $row[1], $row[4], $row[0]); } Was aber auch nicht geht da der string ja immer gleich im Anschluss formatiert wird und somit die Länge so groß ist wie bis zu dem Zeitpunkt. kommt später was größeres juckt des die ersten Zeilen nich viel Weiß da jemand ne bessere Lösung? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.disk Geschrieben 13. Januar 2005 Teilen Geschrieben 13. Januar 2005 Was für eine Datenbank benutzt Du denn? Evtl. kann Dir bereits die Datenbank einiges an Arbeit abnehmen (z.B. lpad und rpad - falls vorhanden). Was mir noch nicht ganz klar ist wie so ein Ergebnisausgabe aussehen soll. Da wäre ein kleines Beispiel sicherlich nicht ganz verkehrt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SNOWMAN Geschrieben 13. Januar 2005 Autor Teilen Geschrieben 13. Januar 2005 Thx für die Antwort, hab da schon etwas rumgetestet, letztendlich hat mir n Kollege geholfen, sieht nun so aus: my $oraProc = "BEGIN pmisp_product_filldynattrib( $intart_id, $xfregid, \'$lang\',\'$lang\', $intstatussp, :x); END;"; $sth = $dbh->prepare($oraProc); $sth->bind_param_inout( ":x", \$refcursor, 0, { ora_type => ORA_RSET } ); $sth->execute; $sth->finish; $val_len = 0; while( @row = $refcursor->fetchrow_array()){ my $attid = $row[1]; my $attval = $row[4]; my $attname = $row[0]; my $vallen = length($attval); my $idlen = length($attid); if($val_len < $vallen){ $val_len = $vallen; #Bestimmen der maximalen Spaltenbreite } if($id_len < $idlen){ $id_len = $idlen; #Bestimmen der maximalen Spaltenbreite } my @data = ($attid, $attval, $attname); push(@attribute, \@data); }#while( @row = $refcursor->fetchrow_array()) #Kontrollstrukturen... foreach $data (@attribute) { my ($attid, $attval, $attname) = @$data; $retval = $retval . sprintf("%-${id_len}s = %-${val_len}s (%s)\n", $attid, $attval, $attname); #Festlegen der Spalten }#foreach my $data (@attribute) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.