Die Lehre von Suchabfragen in Datenbanken (mehrdimensionale Arrays)

Einleitung

Viele User wollen datenbankgestützte HTML-Seiten erstellen. Der Sternenhimmelstuermer schrieb bereits eine Abhandlung über einen datenbankgestützten Vokabeltrainer und kreierte dazu einen einfachen, aber aufgeblasenen Quellcode ohne Schleifen.

Dieses war so gewollt, aber Javascriptprofis wissen, dass man ohne Schleifen einige Augaben nur sehr aufwendig coden kann.

Die Eingabe von einem User in ein Suchfeld, um sich ein Datensatz anzeigen zu lassen, ist im Prinzip  eine leichte Aufgabe mit einer einfachen For-Schleife. Der Sternenhimmelstuermer fand komischerweise im Internet  keine  Antwort auf die Frage, wie man ein  Suchfeld erstellt,  dass den Datensatz eines  Arrays von einem  mehrdimensionalen Array  ausdruckt.

Andere Seiten gehen über assoziative Arrays oder Indexes...einfach andere Techniken. O. K., der beste Weg ist nach dem Sternenhimmelstuermer der einfachste und direkte Weg.

Inspiration für den Code fand der Sternenhimmelstuermer auf einer englischsprachigen Seite, die ihre Sache anständig machte und dafür einen Link bekommt.

Die Erklärung ist auf Englisch und die Codezeilen, die der Sternenhimmelstuermer verwendete, entsprechen nur marginal dem Originalcode, da der Code sich auf ein Quiz mit Radiobuttons bezog. Dennoch ist die Syntax saugut, achten Sie mal auf die Zeilen mit eval()...Ja, ein Anfänger wird nicht verstehen, wie man mit der Ausgangsgrundlage von einem Code für einen Counter, der Zahlen ausgibt, auf die Ausgabe eines Datenbanksatzes kommt - ist aber wirklich easy, wenn man Fantasie hat.

Der Sternenhimmelstuermer kreierte schon eine Suchmaschine in VBS und Batch mit Suchindexes, diesmal wird es keine Suchmaschine geben, obwohl das eigentllich lustig wäre...

Wie auch immer: Die Demo und Erklärung sind wirklich in anständigen deutsch und nicht in Javascript-Kauderwelch geschrieben - eben von einem Pragmatiker, der locker mit vier Subsprachen alles ausdrücken kann, was irgendwie mit Datenbanken, Suchen usw. zusammenhängt. Und wenn Sie den folgenden Abhandlungen folgen werden, so lernen Sie ein wenig mehr als "Hello World"...

Inhaltsangabe
Code
Erklärung des Codes
Farbe
Vergleich mit VBS
Automatisierung bei Erstellung von Javascriptdatenbanken mit Batch
Fazit

Code

<html>
  <head>
    <meta name="generator" content="HTML Studio">
    <title>Datenbankabfrage Demo</title>
    <meta name="author" content="Sternenhimmelstuermer">
    <meta name="description" content="datenbank">
    
    <SCRIPT LANGUAGE="JavaScript"><!--

var datenbank = new Array();
datenbank[0] = new Array("Meyer","Uwe","Berlin","030/ 36 35");
datenbank[1] = new Array("Müller","Anton","Berlin","030 37 33");
datenbank[2] = new Array("Meyer","Werner","Berlin","030 38 33");

function db() {
var ergebnis = ""
    for (var i=0;i<3;i++) {
    var suchAnfrage = eval("document.datenbankForm.Antwort1.value");
    var inDatenbank = eval("datenbank[" + i + "][0]");

    if (suchAnfrage == inDatenbank)
    ergebnis+= datenbank[i] + "    "
    }
    document.datenbankForm.Antwort.value = ergebnis
   
}
 //--></SCRIPT>
   </head>
   <body>
  <center>
  <FORM NAME="datenbankForm">
  <div>Ein Kleiner Datenbanktest<div>
<br>
<br>
<div>Suchfeld:<INPUT TYPE="text" NAME="Antwort1" id=Antwort1 VALUE="" SIZE="40"></div>

  </div>
<div>Geben Sie in die Demo einen Nachnamen: Meyer oder Müller ein. Alle Namen sind Teile einer Datenbank und deren Adressen werden ausgegeben.</div> 
<P>
<INPUT TYPE="BUTTON" onClick="db()" VALUE="Ergebnis">
Antwortfeld: <INPUT TYPE="TEXTBOX" NAME="Antwort" id=Antwort VALUE="" SIZE="70"></P>
</FORM></center>
</body>
 </html>

oder  als lauffähige Demo.



Erklärung des Codes

Alles bis zum Script wird nicht noch einmal erklärt, sonst kriegen Fortgeschrittene eine Krise, die in den letzten zwei Abhandlungen über ein Quiz in Javascript und einen Vokabeltrainer auf dieser Seite nochmal alles erklärt bekommen.

var datenbank = new Array();
datenbank[0] = new Array("Meyer","Uwe","Berlin","030/ 36 35");
datenbank[1] = new Array("Müller","Anton","Berlin","030 37 33");
datenbank[2] = new Array("Meyer","Werner","Berlin","030 38 33");

Die Datenbank liegt innerhalb der Funktion. Das ist nicht unbedingt schlau, da andere Funktionen davor nicht auf die Datenbank zugreifen könnten, wenn man mehrere Funktionen verwendet.  Vor den Funktionen ist optimal, aber der Sternenhimmelstuermer macht gerne mit Absicht Fehler - hauptsache es läuft...

Das mehrdimensionale Array heißt also nun  datenbank und wird in der ersten Zeile auch so definiert. Ab zweite Zeile sehen Sie dann die einzelnen Zeilen einer gedachten Tabelle

1. Zeile steht also wie in z. B. Excel: A1, B1, C1 und D1....
Nur heißt dass in Javascript in der ersten Zeile mit Null beginnend: [0][0], [0][1] , [0][2] und [0][3].

[0]
[0] entspricht also dem Wort Meyer
[0][1] entspricht also dem Wort Uwe
[0][2] entspricht also dem Wort Berlin
[0][3] entspricht also dem Wort 030/ 36 35

Aber da steht doch nur eine Null [0], wieso erzählt der uns was von Doppelzahlen? Javascript ist gnädig und vergibt die Nummern unsichtbar.
Verstanden? Da braucht man kein assoziatives Array, wenn man bereits eine interne Numerierung der Zeile hat. Die Ausgabe der ganzen Zeile ist datenbank[0]

In der nächsten Zeile hat Anton also die Adressierung datenbank[1][1]. Das entspricht in Excel B2

Der Rest ist Syntax: jeder Wert in Anführungsstricheln.

Angriffspunkt für die Suche ist also eine Zahl. Wir wissen, dass der Nachname einer datenbank[x]  [0] in jeder Zeile entspricht. Also bleibt noch die Klärung der Frage, wie wir den Wert X abfragen, der in unserer Datenbank die Werte 0,1,2,3 annehmen kann.

Das nehmen wir nun in Angriff:

function db() {
var ergebnis = ""
    for (var i=0;i<3;i++) {
    var suchAnfrage = eval("document.datenbankForm.Antwort1.value");
    var inDatenbank = eval("datenbank[" + i + "][0]");

    if (suchAnfrage == inDatenbank)
    ergebnis+= datenbank[i] + "    "
    }
    document.datenbankForm.Antwort.value = ergebnis
   
}


Es wird also eine Funktion nahmens db für Datenbank erstellt, die erstmal mit einer geschweiften Klammer geöffnet wird und genauso am Ende geschlossen wird. Dazwischen spielt sich dann der entscheidende Code ab.

var ergebnis = ""

Erstmal definieren wir eine Variabel, die uns später als Endergebnis angezeigt wird. Die ist im Augenblick leer. Da Sie durch eine schleife gejagt wird, sollte Sie auch tunlichst leerbleiben!

for (var i=0;i<3;i++)

Die Zahlen sind ein wenig rot als Gedächtnishilfe. Unsere Datenbank hat drei Zeilen, die bei 0 anfangen und bei 3 aufhören. Der Sternenhimmelstuermer fragt im folgenden also von Oben nach unten und nicht von links nach rechts ab, was ja auch unsinnig wäre, da der Nachname immer eine Null hat und wir die breite des Arrays somit für diese Abfragetechnik nicht benötigen - Ansonsten wäre noch ein datenbank.length, um die Länge des Arrays zu bestimmen - statt einer roten 3  - möglich , aber wozu  eine Variable verbraten, wenn die Zahl für uns Menschen einen schnelleren  Überblick gewährt  - Bei kurzen  Arrays ist das egal, aber bei mehreren hundert Einträgen...

    var suchAnfrage = eval("document.datenbankForm.Antwort1.value");
    var inDatenbank = eval("datenbank[" + i + "][0]");

Jetzt bestimmen wir noch zwei Variablen, die wir im folgenden Vergleichen können, nämlich suchAnfrage inDatenbank . Die Namen von Variablen (var) sind mal wieder uninteressant, müssen aber dann auch so weiter verwendet werden - Copy und Paste garantiert weitgehend dieVermeidung von Fehlern.

var suchAnfrage = eval("document.datenbankForm.Antwort1.value");

Mit dem eval Befehl kann man so ziemlich alles vergleichen. Das Suchanfragewort wird mit der kompletten Pfadangabe gezogen. Im Dokument wird also der Wert in der Datenbankform im Inputfeld mit der ID Antwort1 gezogen. Da ist kein Getelementbyid nötig, dafür haben wir ja den Pfad in Kombination mit eval. Richtig, da ist noch keine Variable i drin, dass kommt jetzt:

var inDatenbank = eval("datenbank[" + i + "][0]");

Alles fast wie zuvor, nur diesmal wird der Wert aus dem Array  datenbank gezogen. Und dazu basteln wir uns die Adressierung. Bei jedem Schleifendurchlauf nimmt die Variable i einen anderen Wert an - eben 0, 1, 2, was dann die letzte Zahl vor drei ist (Erinnern Sie sich: for (var i=0;i<3;i++)).

Im ersten Durchlauf steht da also faktisch datenbank[0][0] also Meyer, im zweiten Durchlauf datenbank[1][0]....

Das ist schön, aber was hat das für einen Sinn?

if (suchAnfrage == inDatenbank)
    ergebnis+= datenbank[i] + "    "

Aha, erst hier wird der Vergleich durchgeführt, nachdem alles definiert wurde: Wenn ( die definierte Variable suchAnfrage des Users, also  z. B. das Wort Meyer gleich der Variable inDatenbank  , also in 00, 10, 20) ist),
dann ist unser Ergebnis hinzuzuaddieren +, nämlich der ganze Datensatz und dann mehrere Leerzeichen datenbank[i] + "    ".

Warum zum Teufel nun hinzuaddieren? Richtig, wir haben in unserer kleinen Datenbank eine Hürde. Es gibt zwei Meyer mit unterschiedlichen Vornamen und Telefonnummern. Beim ersten Schleifendurchlauf wird  also Uwe und beim dritten Schleifendurchlauf  Werner gefunden.

Das sind zwei Datensätze mit demselben Suchwort Meyer. Deshalb diese komische Syntax. datenbank[i] ist immer ein Array und da sind sämtliche Eingaben von Nachnamen, Vornamen, Wohnort und Telefonnummern enthalten.

Genausogut hätten wir z. B. datenbank[i][2] eingeben können und würden dann immer den zweiten Wert eines Arrays herausbekommen - wenn ich Ihnen jetzt noch sagen muss, nach was dann abgefragt wird, dann habe ich das scheinbar saumäßig erklärt...

Kann ich auch die ganze Tabelle in einem Rutsch durchsuchen oder andere Reihen?

Ja, Sie müssen nur die Nummern der Adressierung in der Funktion anpassen z. B. Abfrage nach dem Vornamen:

var inDatenbank = eval("datenbank[" + i + "][0]");

wird zu var inDatenbank = eval("datenbank[" + i + "][1]");

Probieren Sie es einfach aus und fragen dann die Vornamen, also datenbank[0][1] entspricht dann Uwe. Die Schleife geht dann wieder alle 0,1,2 - Datensätze durch und 1 bleibt als fester Wert bei jedem Schleifendurchlauf 1.

Mehrer Reihen bilden Sie,  indem die Funktion  verdoppelt wird, natürlich dann mit Vorzugsweise geänderten Suchoptionen. Das müsste auch mit einer verschachtelten Schleife gehen, aber da macht sich der Pragmatiker Sternenhimmelstuermer keine Gedanken drüber, da das Thema Schleifen erst angerissen wurde und das Datenbankthema ziemlich für Ihn beendet ist.



Farbe

Das Einfärben wurde ausführlich im Vokabeltrainer beschrieben, daher hier nur eine DEMO und kurze Erklärung mit  den Farben rot für kein Ergebnis und  grün bei einem gefundenen Ergebnis.

<html>
  <head>
    <meta name="generator" content="HTML Studio">
    <title>Datenbankabfrage Demo</title>
    <meta name="author" content="Sternenhimmelstuermer">
    <meta name="description" content="datenbank">
<style type="text/css">
input {
    padding: 4px 6px;
    border: 1px solid #555;
    background-color: #fafafa;
}
input.falsch {
   border-color: red;
   background-color: #FF3300;
}
input.richtig {
border-color: green;
background-color: #33FF33;
}
</style>
    
    <SCRIPT LANGUAGE="JavaScript"><!--

var datenbank = new Array();
datenbank[0] = new Array("Meyer","Uwe","Berlin","030/ 36 35");
datenbank[1] = new Array("Müller","Anton","Berlin","030 37 33");
datenbank[2] = new Array("Meyer","Werner","Berlin","030 38 33");

function db() {
var ergebnis = ""
    for (var i=0;i<3;i++) {
    var suchAnfrage = eval("document.datenbankForm.Antwort1.value");
    var inDatenbank = eval("datenbank[" + i + "][0]");

    if (suchAnfrage == inDatenbank)
    ergebnis+= datenbank[i] + "    "
    }
    document.datenbankForm.Antwort.value = ergebnis
   
}

function farbe() {

var element = document.getElementById("Antwort");
if (element.value == "" ){
element.className = 'falsch';
} else {
element.className = 'richtig';
       }
}

 
 //--></SCRIPT>
   </head>
   <body>
  <center>
  <FORM NAME="datenbankForm">
  <div>Ein Kleiner Datenbanktest<div>
<br>
<br>
<div>Suchfeld:<INPUT TYPE="text" NAME="Antwort1" id=Antwort1 VALUE="" SIZE="40"></div>

  </div>
<div>Geben Sie in die Demo einen Nachnamen: Meyer oder Müller ein. Alle Namen sind Teile einer Datenbank und deren Adressen werden ausgegeben.</div> 
<P>
<INPUT TYPE="BUTTON" onClick="db(),farbe()" VALUE="Ergebnis">
Antwortfeld: <INPUT TYPE="TEXTBOX" NAME="Antwort" id="Antwort" VALUE="" SIZE="70"></P>
</FORM></center>
</body>
 </html>

Es wurde also ein CSS mit drei Farbangaben erstellt: Ursprungsfarbe

input {
    padding: 4px 6px;
    border: 1px solid #555;
    background-color: #fafafa;
}

folgend mit den zwei Alternativfarben (input.falsch rot und input.falsch  grün), je nachdem, ob ein Datensatz vorhanden ist oder nicht.

Dafür wurde eine Funktion geschaffen, die zusätzlich beim Betätigen des Buttons  vom User aktiviert wird ( onClick="db(),farbe()" ).

In der Funktion wird nur mit der getElementbyid-Methode geprüft ( document.getElementById("Antwort"); ), ob ein leerer Wert (element.value == "") vorhanden ist. Steht also kein Ergebnis im Anwortfeld ( Antwortfeld: <INPUT TYPE="TEXTBOX" NAME="Antwort" id="Antwort" VALUE="" SIZE="70">), so gibt es eine rote Farbe ( element.className = 'falsch' ), die im CSS mit den Namen falsch deklariert wurde oder dem Code

input.falsch {
   border-color: red;
   background-color: #FF3300;
}

entspricht.

Die Alternative wird in der Else-Funktion abgelegt

else {
element.className = 'richtig';
       }

Also frei übersetzt: Ansonsten gebe den Farbwert grün. Die Logik dahinter: Steht ein Wert im Ausgabefeld, dann wurde diese aus der Datenbank gezogen. Steht kein Wert im Ausgabefeld, dann wurde auch nichts in der Datenbank gefunden...

Vergleich mit VBS

Dieses ist eine Javascript-Seite, aber es lohnt sich vielleicht mal über den Tellerrand zu schauen. Ein Array in VBS könnte ungefähr so aussehen:

<!DOCTYPE html>
<html>
<body>

<script type="text/vbscript">

Dim person(3,2)
    person(0,0) = "Thiel" : person(0,1) = "Uwe"    : person(0,2) = "Frankfurt" :
    person(1,0) = "Meyer" : person(1,1) = "Jens"  : person(1,2) = "Berlin"
    person(2,0) = "Kunz"  : person(2,1) = "Julia"  : person(2,2) = "Berlin"
    person(3,0) = "Müller": person(3,1) = "Josef" : person(3,2) = "Berlin"
       
document.write person(0,0) & "<br>" & person(0,1) & "<br>" & person(0,2) </script>

</script>

</body>
</html>

Diese Beispiel Funktioniert nur im Internetexplorer, daher keine Demo im Textdokument!

Beim Öffnen des kopierten Textes mit dem Internetexplorer werden die Daten der ersten Person untereinander  angezeigt.

Da der Sternenhimmelstuermer keine VBS- Datenbanken in VBS-Form in dieser Schreibweise  im Internet fand, ist davon auszugehen,  dass weder Privatmenschen, noch die Geschäftswelt auf Datenbanken in VBS setzen.

Das ist aber durchaus denkbar und mit der Doppelpunktmethode, die nicht nur der Visualierung, sondern auch potentiell einer Automatisierung dienen könnte, wäre  eine HTA oder  Konvertierung  von einer textbasierten Datenbank mit einer einfachen Batch  keine Hürde.

Es fiel dem Sternenhimmelstuermer auf, dass die Schreibweise untereinander in VBS eher hinderlich bei der Verbreitung im Internet ist und was bietet sich denn mehr als ein entlehnter Doppelpunkt aus der VBA-Welt, wo man diese schreibweise durchaus einsetzt...

VBS und Javascript unterscheiden sich nur marginal in der Syntax  und datengestützte Anwendungen im Bereich HTA und  Intranet mit dem Internetexplorer sind eine Alternative, die  zwar nicht populär sein dürfte,  aber zumindest der Sternenhimmelstuermer könnte ohne großen Aufwand ziemlich alle Vokabeltrainer... Quizes.. Datenbanken auch auf Anhieb in VBS erstellen.

Zum Code

Person() ist das Array. Dim entspricht var. Die Größe der Datenbank muss bestimmt werden, daher person(3,2)  Das entspricht 3 Reihen, nein eigentlich vier Reihen, aber die Null zählt halt nicht mit - schlecht gelöst...Dasselbe Spiel mit der Breite: 2 entspricht drei Werten pro Zeile, da die Null nicht mitzählt.

Bei der Ausgabe müssen die Felder einzeln adressiert werden: document.write person(0,0) & "<br>" & person(0,1) & "<br>" & person(0,2) </script> Das braucht nicht erklärt zu werden - in Javascript ist die document.write - Methode jedem Anfänger bekannt?
<br> ist der Zeilenumschalter für die nächste Zeile in HTML, da document.write eben Ausgabe in HTML bedingt...

Das Ganze könnte man nun wieder mit For - Schleifen in VBS-Syntax durchlaufen - wir befinden uns in VBS, was man unschwer an den Tags erkennt: <script type="text/vbscript"> </script>

Und jetzt schnell wieder vergessen, damit bei Ihnen keine Sprachverwirrung entsteht. Für den Sternenhimmelstuermer ist dieser Remark in Bezug auf HTA jedoch wichtig und ist deshalb in dieser Abhandlung didaktisch passend eruiert worden...


Automatisierung bei Erstellung von Javascriptdatenbanken mit Batch

Ist die Erstellung von Datenbanken (Arrays) in Javascript nicht ein  langwieriger unverhältnismäßiger Aufwand  im Verhältnis zum Nutzen?

Die Antwort lautet: Definitiv ja, wenn man sich nicht ein kleines Konvertierungstool bastelt, dass hunderte oder tausende von Zeilen innerhalb weniger Sekunden eine bestehende Datenbank umwandelt. Das sind in der Batchsprache ein paar Zeilen Code, aber komischerweise kennt der Sternenhimmelstuermer keine Text_dbt_to_array.bat...

Also ein kurzer Ausflug in die Batchwelt. Als angehender Javascriptprofi, werden sie wissen, wie man ein Textdokument erstellt und den Namen mit Dateiendung ändert (ansonsten haben Sie noch nie ein *.js geschrieben) .

Und los geht es mit einem improvisierten Textdokument, in dem zwei Namen unserer Probedatenbank stehen:

vokabel.txt  Inhalt (der Name ist Pflicht oder mit einer Abänderung mit der Zeile : FOR /F "tokens=*" %%A IN ('findstr /N .* "vokabel.txt"') DO echo %%A>> zahl.txt durch Änderung des roten Dateinamens mit Endung änderbar):

Müller;Anton;Berlin;030/36 35
Meyer;Werner;Berlin, 030 38 33

Dieses Dokument muss relativ (also im selben Ordner wie die Batch liegen)

Dann der angepasste Code für die Konvertierung dieser Datenbank unter Berücksichtigung eines dritten Datensatzes, der als nullter Datensatz in die Batch geschrieben wurde:

set destination=%~dp0%
>"%destination%db.txt"  ECHO datenbank[0] = new Array("Meyer","Uwe","Berlin","030/ 36 35");
FOR /F "tokens=*" %%A IN ('findstr /N .* "vokabel.txt"') DO echo %%A>> zahl.txt
FOR /F "tokens=1,2* delims=:;"  %%i  IN (Zahl.txt) DO echo datenbank[%%i] = new Array("%%j","%%k","%%l","%%m"); >> db.txt

Dann die ganze Batch leicht verständlich erklärt:


Der erste Meyer fällt unter den Tisch, da wir ja mit Null in Javascript beginnen und diesem Umstand geschuldet lieber den Datensatz in die folgende txt_to_js.bat als erste Zeile eingeben:

set destination=%~dp0%
>"%destination%db.txt"  ECHO datenbank[0] = new Array("Meyer","Uwe","Berlin","030/ 36 35");

Richtig, sind eigentlich zwei Zeilen. Die Lage der Batch %~dp0%  wird in der Variablen destination gespeichert.
Dann ein Dokument mit Namen db.txt erstellt, in der die erste Zeile so gechrieben wird (ECHO), wie Sie als Code ausgegeben wird. Damit haben wir  die erste Zeile mit der Null bedient.
Vorsicht: Diese Vorgehensweise ist Distruktiv, d. h. alte Dokumente mit demselben Namen werden komplett überschrieben. Es geht aber auch ein Doppel: >> für das hinzufügen einer Zeile z. B. am Ende eines Dokumentes...

FOR /F "delims=:" %%A IN ('findstr /N .* "vokabel.txt"') DO echo %%A >Zahl.txt 

Die Zeile ist ein wenig komplizierter, aber Sie müssen Sich nur merken, dass die Zeilen durchnummeriert werden und in einem neuen Zahl.txt Zwischendokument gespeichert werden, so dass die Tabelle nun so aussieht:

1: Müller;Anton;Berlin;030/36 35
2:Meyer;Werner;Berlin, 030 38 33

Schauen Sie im Zahl.txt Dokument nach, dass erstellt wurde, wenn Sie die Batch ausführen

Damit wird jetzt gearbeitet. Wir haben als Separator einen Doppelpunkt und ein Semikolon. Genausogut könnte der zweite Separator aber auch ein einfacher Doppelpunkt oder Leerzeichen nzw.Komma nach einem Doppelpunkt als zweiter Separator sein, wenn es sich im Ursprungstext um eine Komma-, Lerzeichen- oder Doppelpunkt versehene Datenbank handelt.

Die nächste Zeile also aufmerksam betrachten, da hier fast aller Code nach Ihren Bedürfnissen angepasst werden kann:

FOR /F "tokens=1,2* delims=:;"  %%i  IN (Zahl.txt) DO echo datenbank[%%i] = new Array("%%j","%%k","%%l","%%m"); >> db.txt

Der Sternenhimmelstuermer übersetzt das einmal:  Für  (FOR /F)  das Textokument (Zahl.txt), wo es mehr als zwei Bestandteile gibt  ("tokens=1,2*) und zwei Separatoren, nämlich einen Doppelpunkt und in unserem Fall ein Semikolon (  delims=:;" ), füge in das >> db.txt folgende veränderte Zeilen (zeilenweise) hinzu (DO echo), nämlich den Text:

datenbank[%%i] = new Array("%%j","%%k","%%l","%%m");


, der aus dem syntaxgerechten Text mit den fest vergebenen Variablen der For Schleife stammt, die sich aus den Ursprungswerten vonVokabel.txt generieren.

Dabei ist %%i in der Batchsyntax die laufende Nummer vor dem Doppelpunkt
%% j der Nachname vor dem ersten Semikolon
%%k der Vorname vor dem zweiten Semikolon
%%l die Stadt...
%%m die Telefonnummer....

Hört sich komisch an, aber der Sternenhimmelstuermer glaubt, dass ein Fortgeschrittener in Javascript die Syntax schnell versteht und anpassen kann.

Die ganze Batch nochmal in einem Zug zum Kopieren und ausprobieren:

set destination=%~dp0%
>"%destination%db.txt"  ECHO datenbank[0] = new Array("Meyer","Uwe","Berlin","030/ 36 35");
FOR /F "tokens=*" %%A IN ('findstr /N .* "vokabel.txt"') DO echo %%A>> zahl.txt
FOR /F "tokens=1,2* delims=:;"  %%i  IN (Zahl.txt) DO echo datenbank[%%i] = new Array("%%j","%%k","%%l","%%m"); >> db.txt

Aufpassen müssen Sie nur an drei Stellen:

Die Ursprungdatei heißt Vokabel.txt. Den Namen können Sie aber nach belieben ändern!!! zahl.txt und db.txt sind Folgedokumente und in db.txt steht dann die konvertierte Datenbank!

Statt ein rotes Semikolon ( delims=:;" ) können Sie ein Leerzeichen ( delims=: " ) oder Komma ( delims=:," ) eintragen  - bei einem Doppelpunkt bleibt es bei einem Doppelpunkt, da es keinen zweiten Separator gibt (( delims=:" )).

Die Anzahl der Variablen  %%i - %%m ergibt sich aus der Reihenanzahl der Werte. %%i  ist lediglich die Nummer vor dem Doppelpunkt, die der Zeilenzahl entspricht. Da die Datenbank durchnummeriert wird, bietet sich diese Vorgehensweise an, die Zeilennummer des Zahl.txt zu verwenden. Nur ist da keine Null dabei.

also müssen Sie vor der Erstellung der Batch die Reihen zählen :

[1][0] entspricht also dem Wort Müller = %%j
[1][1] entspricht also dem Wort Abton = %%k
[1][2] entspricht also dem Wort Berlin = %%l
[1][3] entspricht also dem Wort 030/36 35 = %%m

Dieses Spiel kann nun zumindest bis Z durchgeführt werden:

Wir fügen mal so aus Spaß noch eine Datenreihe mit E-Mail an, dann würden wir eine Reihe mehr benötigen:
aus:
FOR /F "tokens=1,2* delims=:;"  %%i  IN (Zahl.txt) DO echo datenbank[%%i] = new Array("%%j","%%k","%%l","%%m"); >> db.txt

wird:
FOR /F "tokens=1,2* delims=:;"  %%i  IN (Zahl.txt) DO echo datenbank[%%i] = new Array("%%j","%%k","%%l","%%m","%%n"); >> db.txt

Ja, dass ist im Prinzip alles und ob das jetzt zwei Datensätze oder zweitausend sind..ist egal.

Der etwas überhebliche Sternenhimmelstuermer sagt jetzt mal, dass ist einfach - genau dasselbe behaupten die Javascriptleute von ihrer Sprache auch -:)


Fazit

 Innerhalb von zwei Abhandlungen (dieser und Vokabeltrainer) wurden Datenbankanwendungen vollständig erklärt. Von der Erstellung, über den Zugriff auf einzelne Werte der Datenbank, bis Ausgabe von einzelnen Datensätzen und farblicher Markierung. Dazu eine komfortable Suchfunktion mit Berücksichtigung doppelter Werte bei Suchtreffern.

Da bleiben keine Wünsche offen und der Sternenhimmelstuermer kann das Thema Datenbanken in Javascript beruhigt abschließen. Denken Sie daran, dass die Daten von jedem kopiert werden können, was der Sternenhimmelstuermer gut findet, da er für Transparenz und eine freihe Community bei unwichtigen Daten ist.

Bei Datensätzen von Personen müssen Sie natürlich die Erlaubnis jeder einzelnen Person einholen - wenn die bei Facebook und Co. sind, dann sind ihre Datensätze eh verloren...

Der Sternenhimmelstuermer beschäftigt sich schon seit Jahren mit Datenbanken - ist halt faszinierend und datengestützte Anwendungen sind meistens überlegen..., besonders wenn sich jemand die Mühe macht, einfachen Code und einfache Erklärungen ins Netz zu stellen.

Es gibt natürlich unterschiedliche Vorgehensweisen. Der Sternenhimmelstuermer hat in den letzten drei Wochen aus dem Nichts heraus diese Vorgehensweise entwickelt - ohne irgendwelche Bücher allein mit Google und Gottes Hilfe, ohne direkt zu kopieren und ist mit dem Ergebnis eines Beginners in der Javascriptwelt mehr als zufrieden, dass er eine Technik in seinem Stil prägen konnte...

Anmerkung: Der Sternenhimmelstuermer beschäftigte sich wie gesagt mit drei anderen Computersubsprachen lange Zeit und Javaskript ist eben dann leicht erlernbar - ist nur eine Frage der Syntax..

Impressum



Impressum
Datenschutz