Home / LinuxUser / 2012 / 01 / Textdatei-basiertes Datenbanksystem Recutils

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

Debian leicht gemacht
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.

Ohne Umwege

Textdatei-basiertes Datenbanksystem Recutils

Reguläre Ausdrücke

Die Recutils unterstützen in Abfragen als Argumente von -e Muster aus regulären Ausdrücken, analog zu denen, die Egrep oder grep -e zulassen. Eine Besonderheit der Recfiles stellen die Statements mit einem vorangestellten Prozentzeichen (Tabelle "Spezielle Datensätze") dar: Mit ihnen organisieren Sie die Datenbank.

Spezielle Datensätze

Statement Wirkung
%rec definiert den Typ eines Datensatzes und kennzeichnet Datensatzbeschreibungen (Record Descriptors)
%mandatory, %prohibit legt fest, welche Felder in Datensätzen auftreten dürfen und welche nicht
%unique, %key definiert eindeutige (Primär-)Schlüssel
%auto bewirkt das automatische Erzeugen von Felder
%doc erlaubt, zusätzliche Informationen zu Datensätzen aufzunehmen
%typedef, %type erzeugt Typnamen und ordnet Typen und Felder zu
%sort sortiert Datensätze nach vorgegebenen Feldern
%size ermöglicht, die Größe von Datensätzen einzustellen
%confidential verschlüsselt Informationen

In Emacs

Im Prinzip eignet sich jeder Editor zum Bearbeiten von Recfiles, doch außer Emacs bietet keiner spezielle Funktionen, die Ihnen die Arbeit erleichtern. Die Recutils bringen einen speziellen (Major-)Modus für Emacs mit, der sich in der Datei rec-mode.el verbirgt. Dieser entstand speziell zum Bearbeiten von Recfiles. Steht in der ersten Zeile einer geladenen Datei die Zeichenkette # -*- mode: rec -*-, interpretiert Emacs diese als Recfile und aktiviert automatisch den passenden Modus.

Datensätze erscheinen nun eingefärbt: Schlüsselwörter sind blau, Werte schwarz und Kommentare grün. Weiterhin gibt es nun eine Reihe spezieller Tastenbindungen, mit denen Sie Funktionen zum Bearbeiten direkt aufrufen. Die Tabelle "Tastenbindungen im Emacs" fasst die wichtigsten davon zusammen.

Tastenbindungen im Emacs

Taste Funktion
[Tab] zum nächsten Feld wechseln
[Eingabe] weiter springen
[Leertaste] Sichtbarkeit umschalten
[#] Datensätze zählen
[Umschalt]+[A] Daten an aktuelles Feld anhängen
[Umschalt]+[B] Editiermodus umschalten
[Umschalt]+[I] Informationen zur Datenbank zeigen
[Umschalt]+[R] aktuellen Datensatz bearbeiten
[Umschalt]+[T] Feldtyp bearbeiten
[B] zurück springen
[E] Datensatz bearbeiten
[L] Datensätze suchen
[M] Feld trimmen
[N] zum nächsten Datensatz wechseln
[P] zum vorigen Datensatz wechseln
[S] Suchfunktion
[T] Datensatzbeschreibung zeigen
[Strg]+[C],[T] Datensatztypen suchen

Im Rec-Modus beschränkt Emacs die Darstellung der Datensätze durch sogenanntes "Narrowing" auf die momentan relevanten Teile, beispielsweise den aktuellen Datensatz. Das erhöht die Übersicht, wenn Sie genau wissen, was Sie gerade bearbeiten. Falls dieses Verhalten Sie irritiert, heben Sie es durch [Strg]+[X],[N],[W] auf. Über [Strg]+[X],[N],[N] aktivieren Sie es erneut.

In der Emacs-typischen Schreibweise finden Sie diese Tastenkombination auch als C-x x n und C-x n n beschrieben. Das funktioniert auch über [Umschalt]+[B] und schaltet dabei den Buffer mit der Datenbank in den Editiermodus; voreingestellt öffnet der Emacs Recfiles schreibgeschützt.

Ein Teil der Emacs-Funktionen entspricht jenen, welche die Befehle der Recutils bereitstellen: So wirkt [Umschalt]+[I] wie recinf, [L] stellt eine interaktive Variante von recsel bereit. Gerade diese Funktion hilft, die Arbeitsweise der Recutils zu verstehen. Ein Beispiel verdeutlicht den Einsatz des Modus, der voreingestellten Tastenbindungen und der Befehle.

Nach dem Laden der Beispieldatenbank movies.rec zeigt der Emacs nur eine Zeile, sofern der Rec-Modus aktiv ist:

%rec: movies

Das Schlüsselwort %rec legt den Typ aller folgenden Datensätze fest, bis das Dateiende erreicht ist oder ein neues Statement dieser Art auftritt. Im obigen Beispiel haben die Datensätze also zunächst alle den Typ movies. Falls es weitere Typen im Recfile gibt, zeigt [Umschalt]+[I] sie in der Statuszeile an. Da hier nur 898 movies erscheint, kennen Sie den Umfang der Datenbank und den Typ der Einträge.

Um die Datenbank selbst im Detail zu sehen und zu editieren, wechseln Sie [Umschalt]+[B] in den Editiermodus (Edit buffer zeigt dies an). Alle üblichen Editierbefehle stehen nun bereit. Insbesondere aktiviert [Strg]+[S] die inkrementelle (Volltext-)Suche über alle Felder, mit der Sie in allen Datensätzen suchen. Auch Suchen und Ersetzen steht hier zur Verfügung, ebenso wie das Einfügen oder Löschen von Zeilen (sprich: Feldern) in den Datensätzen. Es lohnt sich aber, dafür die speziellen Befehle des Rec-Modus zu nutzen.

Mit [Strg]+[C],[Strg]+[C] beenden Sie diesen Modus und sehen dann den Datensatz an, in dem sich der Cursor gerade befand. Über [Umschalt]+[A] haben Sie nun die Möglichkeit, ein neues Feld anzulegen, beispielsweise ein Genre, oder etwas zu ergänzen. Auch lassen sich die angezeigten Felder und ihre Werte nun für diesen ausgewählten Datensatz verändern, bis [Strg]+[C],[Strg]+[C] wieder den Modus beendet.

Über [Tab] wechseln Sie zum nächsten Feld. [Umschalt]+[T] erlaubt es, neue Datensatztypen in Recfiles anzulegen. Diese Datensatztypen strukturieren Recfiles auf einer Ebene über den Datensätzen und erlauben es, unterschiedliche Datensatztypen in einem Recfile aufzunehmen.

Beim Betätigen der Taste springt der Cursor zur aktuellen Definition, die mittels %rec: erfolgt. Bei movies.rec definiert in der ersten Zeile %rec: movies den Typ. Bei Bedarf kopieren Sie einfach die Zeile und fügen sie an anderer Stelle im Recfile – etwa vor dem gewünschten Datensatz oder am Ende der Datei – erneut ein, wobei Sie den Typ anpassen.

Es gibt in der Beispieldatenbank drei Einträge zum Film mit dem Titel "Mr. Nice Guy". Wenn Sie nun zwischen dem zweiten und dritten Eintrag den Typ wechseln, haben Sie die Möglichkeit, die drei Datensätze trotz gleicher Titel unterschiedlichen Typen zuzuordnen und entsprechend zu verwalten (Listing 4). Sichern Sie diese veränderte Datenbank unter einem neuen Namen, etwa als movies1.rec.

Listing 4

Id: 539
Title: Mr. Nice Guy
Alternative_titles: Yatgo ho yan
Add_date: 16.07.2002
Audio: German
Identifier: 883
Location: Box 1
Media: (DivX)
Amount_of_Media: 1
Video_format: (DivX);-) V3.11 LOW MOTION
Viewed: 0
%rec: movies1
Id: 540
Title: Mr. Nice Guy - Uncut
Alternative_titles: Yatgo ho yan
Add_date: 16.07.2002
Audio: English
Identifier: 147
Location: Box 2
Media: (DivX)
Amount_of_Media: 1
Subtitles: English [SubRip]
Video_format: (DivX);-) MPEG4 v3
Viewed: 0

Die Auswirkungen dieser Modifikation zeigen sich bei Abfragen an die Datenbank. In der Shell dient recsel zum Suchen von Datensätzen. recsel -e "Title ~ 'Nice'" sucht alle Datensätze, die im Titel-Feld das Wort "Nice" enthalten (Listing 5). Die Tilde zwischen dem Schlüsselwort Title und der Zeichenkette Nice, die in Hochkommata stehen muss, bewirkt, dass jedes Auftreten der Zeichenkette als Treffer gilt ("soft match"). Mit einem Gleichheitszeichen finden Sie nur exakte, vollständige Übereinstimmungen ("hard match").

Listing 5

$ recsel -e "Title ~ 'Nice'" movies.rec
Id: 538
Title: Mr. Nice Guy
...
Id: 539
Title: Mr. Nice Guy
...
Id: 540
Title: Mr. Nice Guy - Uncut
...

Bei der veränderten Datenbank movies1.rec findet recsel zwei unterschiedliche Datensatztypen und meldet dies (Listing 6). Nach der Angabe eines Typs liefert das Tool das korrekte Ergebnis.

Listing 6

$ recsel -e "Title ~ 'Nice'" movies.rec
recsel: Fehler: Verschiedene Datensatztypen gefunden. Bitte mit -t einen angeben.
$ recsel -t movies -e "Title ~ 'Nice'" movies1.rec
Id: 538
Title: Mr. Nice Guy
...
Id: 539
Title: Mr. Nice Guy
...

Für den Typ movies1 liefert die Abfrage aus Listing 7 den fehlenden Eintrag. Dieselbe Abfrage ließe sich übrigens direkt im Emacs bewerkstelligen: [L] aktiviert die Suchfunktion, [Umschalt]+[E] die Suchmethode. Alle weiteren Parameter fragt Emacs dann ab. [Eingabe] übernimmt die Angaben.

Listing 7

$ recsel -t movies1 -e "Title ~ 'Nice'" movies1.rec
Id: 540
Title: Mr. Nice Guy - Uncut
...
Tip a friend    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

LinuxUser 05/2014

Aktuelle Ausgabe kaufen:

Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,95 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 60,60) können Sie im Medialinx-Shop bestellen.

Tipp der Woche

Bilder vergleichen mit diffimg
Bilder vergleichen mit diffimg
Tim Schürmann, 01.04.2014 12:40, 1 Kommentare

Das kleine Werkzeug diffimg kann zwei (scheinbar) identische Bilder miteinander vergleichen und die Unterschiede optisch hervorheben. Damit lassen sich nicht nur Rätsel a la „Orignial und Fäls...

Aktuelle Fragen

programm suche
Hans-Joachim Köpke, 13.04.2014 10:43, 8 Antworten
suche noch programme die zu windows gibt, die auch unter linux laufen bzw sich ähneln sozusagen a...
Funknetz (Web-Stick)
Hans-Joachim Köpke, 04.04.2014 07:31, 2 Antworten
Bei Windows7 brauche ich den Stick nur ins USB-Fach schieben dann erkennt Windows7 Automatisch, a...
Ubuntu 13.10 überschreibt immer Windows 8 Bootmanager
Thomas Weiss, 15.03.2014 19:20, 8 Antworten
Hallo Leute, ich hoffe das ich richtig bin. Ich habe einen Dell Insipron 660 Ich möchte gerne Ub...
USB-PTP-Class Kamera wird nicht erkannt (Windows-only)
Wimpy *, 14.03.2014 13:04, 15 Antworten
ich habe meiner Frau eine Digitalkamera, AGFA Optima 103, gekauft und wir sind sehr zufrieden dam...
Treiber
Michael Kristahn, 12.03.2014 08:28, 5 Antworten
Habe mir ein Scanner gebraucht gekauft von Canon CanoScan LiDE 70 kein Treiber wie bekomme ich de...