base
portal
Suche:
Forum
Start
Neue Seite erstellen
Titel:
<h2>Sortierung mit deutschen Umlauten</h2> <h3>Neue Sortierung bei Feldern "Text (de)"</h3> baseportal kann ab Version 3 nach den deutschen Regeln sortieren, d.h. Umlaute werden wie die entsprechenden Grundbuchstaben behandelt: <c>ä</c> wie <c>a</c>, <c>ö</c> wie <c>o</c> etc. - <i>Schäden</i> wie <i>Schaden</i> und damit vor <i>Schadensfall</i>. Bei sonst gleichlautendem Begriff stehen sie hinter dem zugehörigen Grundbuchstaben: <i>Schaden</i> also vor <i>Schäden</i> und <i>fuhren</i> vor <i>führen</i>. Das <i>"scharfe s"</i> <c>ß</c> sortiert baseportal nach der ISO-Norm 5007-1 hinter <c>ss</c> ein, <i>Masse</i> steht also vor <i>Maße</i>. Der Duden sortiert dies -unlogischerweise- anders herum; bei den anderen Umlauten steht der Umlaut schliesslich auch hinter dem Grundbuchstaben. Dazu muss die Sortierung des gewünschten Feldes auf "Text (de)" gestellt werden und die Datenbank danach reorganisiert werden. <h3>Umwandlung Gross/Kleinschrift</h3> Auch bei Umwandlungen in Groß-/Kleinschrift mit <c>uc</c> bzw. <c>lc</c> werden Umlaute nun berücksichtigt: <code> <perl> out uc("Mäßigung"); </perl> </code> Gibt <i>MÄSSIGUNG</i> aus. Bei der Umwandlung von Gross- in Kleinbuchstaben gibt es keine Ersetzung für das <c>ß</c>, die Rückwandlung mit <code> <perl> out lc("MÄSSIGUNG"); </perl> </code> ergibt <i>mässigung</i>. <h3>Eigene Texte sortieren</h3> Möchte man eigene Texte (Arrays) nach deutschen Umlauten sortieren, so gibt es dafür die Funktion <c>sort_de</c>: <code> <perl> @x=sort_de("hans", "hähä", "haha", "Hänschen", "Haar", "hänftling", "Hägar", "HAHA"); out "@x"; </perl> </code> Führt zu folgender Ausgabe: <code> Haar Hägar HAHA haha hähä hänftling hans Hänschen </code> Wie man sieht werden Grossbuchstaben dabei ignoriert. Möchte man dies nicht, so muss man das "de" in der Funktion GROSS schreiben: <code> <perl> @x=sort_DE("hans", "hähä", "haha", "Hänschen", "Haar", "hänftling", "Hägar", "HAHA"); out "@x"; </perl> </code> Führt zu folgender Ausgabe: <code> HAHA Haar Hägar Hänschen haha hähä hänftling hans </code> <h3>Vergleiche mit Umlauten</h3> Um zwei Wörter mit Umlauten zu vergleichen gibt es die Funktion <c>cmp_de</c>. Diese liefert -1 zurück wenn das 1. Wort vor dem 2. Wort steht, 1 wenn das 2. Wort vor dem 1. Wort steht und 0 wenn beide identisch sind: <code> <perl> out cmp_de "Kalb", "kälber"; out cmp_de "Wörter", "wort"; </perl> </code> Ergibt -1 und 1. Auch hier werden mit einem grossen "DE" Grossbuchstaben beachtet: <code> <perl> out cmp_DE "Kalb", "kälber"; out cmp_DE "Wörter", "wort"; </perl> </code> Ergibt 1 und 1. Damit sind auch alle anderen Textvergleiche wie <c>lt</c>, <c>le</c> etc. möglich: <tab> Bedingung|Entspricht cmp_de($x,$y)<0|$x lt $y cmp_de($x,$y)<=0|$x le $y cmp_de($x,$y)>0|$x gt $y cmp_de($x,$y)>=0|$x ge $y </tab> Die Abfrage auf Gleichheit funktioniert mit oder ohne Umlaute immer mit <c>eq</c>. <h2>Kurzformen beim Lesen und Beschreiben von Datenbanken</h2> <code> get "datenbank"; </code> Holt den kompletten Inhalt der Datenbank (Die Abfrage lautet: <c>Id==*</c>). <code> put "datenbank"; </code> Schreibt den Standard-Hash <c>%_put</c> in die Datenbank. <h2>Ergebnisse können mit $ergebnis{Feld}[Zeile] gelesen werden</h2> Nach einem <c>get</c> steht das Ergebnis in einem <i>Hash</i> mit dem gleichen Namen wie die Datenbank zur Verfügung: <code> get "meinedb"; for(my $i=0; $i<$_amount; $i++) { out $meinedb{Feldname}[$i]," "; } </code> Gibt man einen Ergebnisnamen an, so wird dieser als Hashname verwendet: <code> 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]," "; } </code> Zur (Test-)Ausgabe des Ergebnis-Hashs eignet sich der Befehl [564:dump]: <code> get "meinedb"; out dump %meinedb; </code> <h2>Ausgabefilter in eigenem Code aktivieren</h2> Innerhalb eigenen Codes werden Einträge die aus einer Datenbank gelesen wurden, nicht durch den <i>Ausgabefilter</i> 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 <c>datum</c> in ein "schönes" Ausgabeformat gewandelt werden muss. Beim <c><do action=all..</c> oder <c><loop>..</loop></c> wird dies automatisch erledigt, so wie es in der Felddefinition angegeben wurde. Möchte man dies auch bei <c>get</c>-Befehlen erreichen, muss man ein Plus <c>+</c> nach dem Datenbank-Namen angeben: <code> get "Datum>jetzt", "datenbank", "+"; out $Datum; </code> Gibt <c>$Datum</c> im Ausgabeformat der Felddefinition aus, z.B. <i>2.September.2006</i> Das interne Format liegt zusätzlich im Hash <c>%_raw</c> vor, in diesem Fall also in <c>$_raw{Datum}</c>. Auch bei Verwendung des <c>+</c> kann ein Ergebnishash verwendet werden, was aber zusätzlich zu einem leicht anderen Verhalten führt: <h2>Feldvariablen nicht belegen</h2> Um den Ausgabefilter zu aktivieren, muss man das <c>+</c> direkt vor den Ergebnishash schreiben: <code> get "Name==hans", "datenbank", "+erg"; out $erg{Datum}[0]; </code> Dies führt dazu, dass nicht mehr automatisch Variablen mit Feldnamen gesetzt werden (<c>$Datum</c> ist also leer). Das Abfrageergebnis liegt nur im Hash <c>erg</c> vor - durch den Ausgabefilter gewandelt. Die "Rohdaten" sind ebenfalls vorhanden und stehen in <c>$erg{_raw}{Feldname}[Zeile]</c>, in diesem Beispiel also in <c>$erg{_raw}Datum[0]</c>. 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 <c>-</c>: <code> get "Name==hans", "datenbank", "-"; out $datenbank{Datum}[0]; </code> Das Ergebnis steht dann im Datenbank-Hash. Natürlich funktioniert dies auch in Verbindung mit einem Ergebnis-Hash: <code> get "Name==hans", "datenbank", "-erg"; out $erg{Datum}[0]; </code> Gibt das interne Format von <c>Datum</c> aus. Um das Ergebnis später doch in Feldvariablen abzurufen, benutzt man einfach <c>get_next</c>: <code> get_next "erg"; out $Datum; </code> Alle Abfragemöglichkeiten in einer Übersicht: <tab> Abfrage|Auswirkung get "db";|Kein Ausgabefilter, Feldvariablen werden gesetzt, Ergebnis in <c>%db</c> get "db", "erg";|Kein Ausgabefilter, Feldvariablen werden gesetzt, Ergebnis in <c>%erg</c> get "db", "+";|Ausgabefilter aktiv, Feldvariablen werden gesetzt, Ergebnis in <c>%db</c> get "db", "-";|Kein Ausgabefilter, Keine Feldvariablen, Ergebnis in <c>%db</c> get "db", "+erg";|Ausgabefilter aktiv, Keine Feldvariablen, Ergebnis in <c>%erg</c> get "db", "-erg";|Kein Ausgabefilter, Keine Feldvariablen, Ergebnis in <c>%erg</c> </tab> <h2>Id bei neuem Datensatz immer um 1 erhöht</h2> Ab der Version 3 bekommt jeder neue Datensatz eine neue Id, auch dann, wenn zuvor der Datensatz mit der höchsten Id gelöscht worden ist. <h2>Suche nach Datensätzen mit leeren Feldern</h2> Mit dem <c>_</c> kann nun nach leeren Feldern gesucht werden: <code> <perl> get "Vorname==_", "Personen"; while(get_next("Personen")) { out "$Name<br>"; # gibt alle Namen mit leerem Vornamen aus } </perl> </code> <h2>Maskieren von Spezialabfragen</h2> Die Spezialwerte <c>*</c>, <c>#</c>, <c>?</c>, <c>_</c> bei Datenbank-Abfragen können nun maskiert werden: <code> get "Feld==\\?"; </code> Holt alle Einträge bei denen <c>Feld</c> tatsächlich das Zeichen <c>?</c> enthält. Die Abfrage ohne Maskierung: <code> get "Feld==?"; </code> würde einen zufälligen Eintrag holen. <achtung> Beachten Sie dass 2 "Backslashes" <c>\</c> zur Maskierung nötig sind, da die Abfrage 2 Stufen (Perl und baseportal) durchläuft. </achtung> <h2>Sortierung oder Bereich vor get [...]</h2> Dem speziellen <c>get</c>-Aufruf mit <c>[...]</c> kann nun auch eine Sortierung oder ein Bereich übergeben werden, indem die Werte mit den Variablen <c>$_get_range</c> und <c>$_get_sort</c> vorher gesetzt werden: <code> $_get_range="10,20"; $_get_sort="-"; get ["Name", "==!", $name], "db"; </code> Holt die Einträge 10 bis 30 mit dem Feld <i>Name</i> die genau <c>$name</c> enthalten, in umgekehrter Reihenfolge sortiert. <c>$name</c> kann auch Leerzeichen enthalten.
Name:
Passwort:
Stichworte:
Version:
1
2
3 Angebot:
Alle
Nur Miete / Lizenz
Nur Miete / Lizenz professional
Nur Miete
Nur Miete smart + pro
Nur Miete smart + pro / Lizenz
Nur Miete pro
Nur Miete ab pure2, smart2, pro1
Nur Lizenz
Nur Lizenz professional
Nur Kostenlos
Ohne Änderungen zurück zur Seite
-
+
©
baseportal
GmbH. Alle Rechte vorbehalten.
powered in 0.01s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!