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

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

„Klickbunt auf dem Server? Warum nicht, wenn's hilft!"
(220 Punkte bei 8 Stimmen)
Wheezy + Kernel 3.9.2 + LXDE
(164 Punkte bei 4 Stimmen)
KDE 4.10.2, Gnome 3.6 und mehr
(143 Punkte bei 5 Stimmen)
Google schmeißt Jabber raus ...
(121 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
...
Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

title_2013_06

Aktuelle Ausgabe kaufen:

Heft bestellen 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

Emacs als Psychologe
Emacs als Psychologe
Tim Schürmann, 21.05.2013 11:49, 0 Kommentare

Wer beim Schreiben in Emacs nicht mehr weiter weiß oder schier an einer Programmieraufgabe verzweifelt, der kann den eingebauten Psychologen um Rat fragen.

1966 entwickelte der Infor...

Aktuelle Fragen

Kontakt via QR code hinzufügen
Herman Sproesser, 17.05.2013 17:46, 3 Antworten
Hi hab in der aktuellen ausgabe 06.2013 den artikel über QR Codes gelesen. Ich hab nartürlich...
Dateimanager Dolphin, wo legt er die Datei Kommentare ab?
Uwe Heine, 16.05.2013 15:19, 1 Antworten
Suse Linux 12.1 - KDE 4.7.2 / Dolphin 1.7. Ich habe bei vielen Dateien über Dolphin Kommentare...
wie baut man Kernel Module so, dass sie mit jedem Kernel laden?
GoaSkin , 22.04.2013 10:22, 1 Antworten
Hallo, baut man anhand eines Kernel-Sources Module, nutzt Linux im Normalfall eine strikte V...
Problem beim Installieren von SuSe 12.3
Georg Prokert, 14.04.2013 00:04, 16 Antworten
Hallo, auf meinem neuem Laptop (Acer Aspire V3-771, Intel Core i5-3230 M, Intel HD Graphics 4...
lvm wieder loswerden
Peter Dibbern, 11.04.2013 16:28, 4 Antworten
Ich habe sämtliche alten Kisten ausgeschlachtet und aus der Teilen einen Rechner zusammengeschrau...