baseportal
Suche: 
 Forum   Start 

Ergebnishash und Ausgabefilter

 
Nach einem get steht das Ergebnis in einem Hash mit dem gleichen Namen wie die Datenbank zur Verfügung:

get "meinedb";

for(my $i=0; $i<$_amount; $i++)
{
    out $meinedb{Feldname}[$i]," ";
}

Gibt man einen Ergebnisnamen an, so wird dieser als Hashname verwendet:

get "Name~=a", "meinedb", "ergebnis1";
get "Name~=b", "meinedb", "ergebnis2";

for(my $i=0; $i<$ergebnis1{_amount}; $i++)
{
    out $ergebnis1{Feldname}[$i]," ";
}

for(my $i=0; $i<$ergebnis2{_amount}; $i++)
{
    out $ergebnis2{Feldname}[$i]," ";
}

Zur (Test-)Ausgabe des Ergebnis-Hashs eignet sich der Befehl dump:

get "meinedb";
out dump %meinedb;

Holt die Datenbank "meinedb" und gibt deren Inhalt vollständig aus.


Ausgabefilter in eigenem Code aktivieren

Innerhalb eigenen Codes werden Einträge die aus einer Datenbank gelesen wurden, nicht durch den Ausgabefilter gewandelt, liegen also immer "roh" vor, so wie sie in der Datenbank stehen. So enthält z.B. ein Datumsfeld den Wert im internen Format, der erst mit datum in ein "schönes" Ausgabeformat gewandelt werden muss. Beim <do action=all.. oder <loop>..</loop> wird dies automatisch erledigt, so wie es in der Felddefinition angegeben wurde.

Möchte man dies auch bei get-Befehlen erreichen, muss man ein Plus + nach dem Datenbank-Namen angeben:

get "Datum>jetzt", "datenbank", "+";
out $Datum;

Gibt $Datum im Ausgabeformat der Felddefinition aus, z.B. 2.September.2006

Das interne Format liegt zusätzlich im Hash %_raw vor, in diesem Fall also in $_raw{Datum}.

Auch bei Verwendung des + kann ein Ergebnishash verwendet werden, was aber zusätzlich zu einem leicht anderen Verhalten führt:


Feldvariablen nicht belegen

Um den Ausgabefilter zu aktivieren, muss man das + direkt vor den Ergebnishash schreiben:

get "Name==hans", "datenbank", "+erg";
out $erg{Datum}[0];

Dies führt dazu, dass nicht mehr automatisch Variablen mit Feldnamen gesetzt werden ($Datum ist also leer). Das Abfrageergebnis liegt nur im Hash erg vor - durch den Ausgabefilter gewandelt. Die "Rohdaten" sind ebenfalls vorhanden und stehen in $erg{_raw}{Feldname}[Zeile], in diesem Beispiel also in $erg{_raw}Datum[0].

Der Vorteil hierbei ist, dass so unerwünschtes Überschreiben von Variablen vermieden wird.

Möchte man keine Feldvariablen setzen, ohne den Ausgabefilter zu aktivieren, benötigt man ein Minus -:

get "Name==hans", "datenbank", "-";
out $datenbank{Datum}[0];

Das Ergebnis steht dann im Datenbank-Hash. Natürlich funktioniert dies auch in Verbindung mit einem Ergebnis-Hash:

get "Name==hans", "datenbank", "-erg";
out $erg{Datum}[0];

Gibt das interne Format von Datum aus.

Um das Ergebnis später doch in Feldvariablen abzurufen, benutzt man einfach get_next:

get_next "erg";
out $Datum;


Alle Abfragemöglichkeiten in einer Übersicht:


Alte Version vom 22.9.2007, 19:14 - Stichworte: Ergebnishash, %_raw, _raw, Ausgabefilter, Ausgabeformat, Feldvariablen, Internes Format, get_next

c und wiederherstellen - + 
© baseportal GmbH. Alle Rechte vorbehalten.


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