Schrift
[thread]7773[/thread]

Multiline Report (Seite 2)



<< |< 1 2 >| >> 19 Einträge, 2 Seiten
roli
 2006-03-08 18:47
#63617 #63617
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Ich glaub ich werd fragmentarisch, ich schaff's nicht. Das "innere" meiner Schleife sieht wie folgt aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
  if ($- <= 5) {
write(STDOUT_FOOT);
$-=0;
}

# Einträge der aktuellen Datenzeile aufsplitten
($suchbegr, $stammnr, $kn, $lzbkn, $kne, $lzbkne, $gs, $pruefk, $ort, $name2, $name3, $personen_id)=split(/;/,$zeile, 12);

write;

Das Ergebnis ist, das die Fusszeilen immer unmittelbar nach dem Kopf ausgegeben werden. Was mache ich da falsch?
@GwenDragon: wenn ich deine Codezeile nehme bokomme ich fuer jeden Schleifendurchlauf:
Code: (dl )
Write on closed filehandle at ./suchbegr.rep.pl line 162, <QRY_RES> chunk 331.
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
GwenDragon
 2006-03-08 18:48
#63618 #63618
User since
2005-01-17
14848 Artikel
Admin1
[Homepage]
user image
roli
 2006-03-08 18:59
#63619 #63619
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Joh, habe ich, und ich dachte auch es beruecksichtigt zu haben.
Da steht "you can get footers by checking $FORMAT_LINES_LEFT before each write()". Da ich die Laenge kenne (3 Zeilen) dachte ich das es so wie ich's gemacht habe gehen muesste. Ich habe sogar noch zwei Zeilen "springen lassen", da es natuerlich sein koennte das just die letzte Zeile vor dem Footer eine "Multiline" wird, und ich dann zuwenig Platz fuer den Footer haette.
Ich dachte das gemacht zu haben mit
Code: (dl )
if($- <=5)

aber irgendwei ist's das nicht, da der Footer halt direkt nach dem header ausgegeben wird, Kaese.

Ich mache uebrigens gleich Feierabend, und kann mich erst Morgen wieder amit beschaeftigen.
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
roli
 2006-03-09 15:38
#63620 #63620
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Hi,

ich bin's nochmal. Ich habe mir Gwendragons Link nochmals durchgelesen. Die interessante Zeile ist (meiner Meinung nach):
Quote
Here's one strategy: If you have a fixed-size footer, you can get footers by checking $FORMAT_LINES_LEFT before each write() and print the footer yourself if necessary

Ist damit gemeint, das ich den Fuss wirklich mit "print" ausgeben muss? Das checken in welcher Zeile ich mich gerade befinde mach ich ja schon.
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
GwenDragon
 2006-03-09 15:47
#63621 #63621
User since
2005-01-17
14848 Artikel
Admin1
[Homepage]
user image
Sieht so aus. So ganz genau weiß ich es auch nicht, da ich Reports sehr selten benutze ;)
roli
 2006-03-09 15:57
#63622 #63622
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Fuer mich ist's auch 'ne Premiere ;-}
Wobei, so ganz verstehe ich's nicht, mit write(STDOUT_BOTTOM) kann ich den Fuss ja schreiben, nur will's mir nicht am Seitenende gelingen. Er erscheint immer unmittelbar nach dem Kopf.
Mhhh, zufrieden bin ich noch nicht, da ist noch was F&E angesagt.
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
roli
 2006-03-09 16:33
#63623 #63623
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Jipieeeeeee, ich hab's.
Wenn's (noch) eine(n) interessiert:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
open(QRY_RES, "</tmp/qry_res.$$.csv");
$record_couter=0;
foreach $zeile (<QRY_RES>) { # Eine Datenzeile aus der Datei lesen
# liefert true, wenn eine Zeile gelesen werden konnte
chomp $zeile; # Zeilenumbruch entfernen
next if (!$zeile); # Leerzeilen ueberspringen
$record_couter+=1;

#Fusszeile(n) am Seitenende Ausgeben
if ($- <= 5 && $- > 0) {
$~ = STDOUT_FOOT; write;
$~ = STDOUT;
#write(STDOUT_FOOT);
$-=0;
}

# Einträge der aktuellen Datenzeile aufsplitten
($suchbegr, $stammnr, $kn, $lzbkn, $kne, $lzbkne, $gs, $pruefk, $ort, $name2, $name3, $personen_id)=split(/;/,$zeile, 12);

write;
$tmp_rc=$?;
if ($tmp_rc != 0) {
print STDERR "Fehler beim schreiben des Reports => exit $tmp_rc\n";
exit $tmp_rc;
}

}
#Seitenfuss auch auf letzte Seite schreiben
$~ = STDOUT_FOOT; write;

print "\nAnzahl der Datensätze: $record_couter";
close(QRY_RES);

Danke GwenDragon fuer die Hilfe
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
Dubu
 2006-03-10 00:19
#63624 #63624
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Noch ein paar Anmerkungen:
Code: (dl )
open(QRY_RES, "</tmp/qry_res.$$.csv");

Hier fehlt die Fehlerabfrage:
open (my $QryRes, '<', "/tmp/qry_res.$$.csv") or die "could not open /tmp/qry_res.$$.csv: $!";

Code: (dl )
$record_couter=0;

Eine komische Bezeichnung. Sollte das vielleicht $record_counter heißen? Immerhin hast du konsistent die gleiche Bezeichnung verwendet. Damit dir nicht doch mal Fehler dabei unterlaufen, sollte du immer Wiki:use strict benutzen.

Code: (dl )
1
2
foreach $zeile (<QRY_RES>) { # Eine Datenzeile aus der Datei lesen
                            # liefert true, wenn eine Zeile gelesen werden konnte

Der Kommentar stimmt nicht. Tatsächlich wird die gesamte Datei auf einmal in den Speicher gelesen (weil foreach eine Liste erwartet) und dann zeilenweise abgearbeitet. Wenn du wirklich zeilenweise einlesen möchtest, musst du while() benutzen:
while (my $zeile = <$QryRes>) { ...
roli
 2006-03-10 10:02
#63625 #63625
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Moin Dubu,

danke fuer die Tip's, werde ich noch einbauen.
Da erkennt man dann auch wieder den Unterschied zwischen Anfaenger (also mir) und jemandem der da schon laenger aktiv ist ;-}

Mach's gut
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
<< |< 1 2 >| >> 19 Einträge, 2 Seiten



View all threads created 2006-03-08 13:05.