Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?

Geschrieben

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.

Geschrieben

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)

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...