NAME

Trk_dict_oop


SYNOPSIS

Ein Tool zum übersetzen von Wörtern, bzw. Buchstaben in Wörter.

    use Trk_dict;
    # Erstellen eines Objekts
    $Obj = Trk_dict->new(a => 'Adam', w => 'Wall'); # erstellt ein Objekt mit zwei Kurzwort-Langwort Paaren
    # Zeile umwandeln
    $nichtumgewandelt = 'Larry w';  # z.B. der Inhalt eines Entry Feldes einer GUI
    $umgewandelt = $OBJ->translate($nichtumgewandelt); # $umgewandelt = 'Larry Wall'
    # Neuen "Kurzform Langform" Datensatz eingeben
    $umgewandelt = $OBJ->translate('add p Programmiersprachen deutschsprachig') # 'p' = Kurzform;   'Programmiersprachen deutschsprachig' = Langform bzw. Übersetzung
    # $nichtumgewandelt = 'p'
    $umgewandelt = $OBJ->translate($nichtumgewandelt);   # $umgewandelt = 'Programmiersprachen deutschsprachig'
    # $nichtumgewandelt = 'p Perl'
    $umgewandelt = $OBJ->translate($nichtumgewandelt);   # $umgewandelt = 'Programmiersprachen deutschsprachig Perl'

Dieses Modul ist es ein Tool dass Eingaben in GUI Text- oder Entry Feldern durch die wahlweise von Kurzwörtern, die von diesem Modul in Langwörter umgewandelt werden, erleichtern soll.

Also zum Beispiel um in einer Bücherdatenbank bei Genre nur noch 'p' statt 'Programmiersprachen deutschsprachig' schreiben zu müssen.

Da das Modul Objektorientiert ist, ist es sehr einfach für verschiedene Eingabefelder der GUI Oberfläche verschiedene Objekte und damit Übersetzungslisten zu verwenden.

Das Ergänzen von neuen Kurzwort-Langwortpaaren ist dabei direkt von dem Eingabefeld der GUI Oberfläche aus möglich, dies kann aber auch unterbunden werden.


DESCRIPTION

Wandelt auf Basis eines Objekts Strings mit Kurzzeichen in Wörter um.

Das dazu zugrunde liegende Wörterbuch ist ein Hash der die Objektvariable bildet. Die Basis des Objekts ist also die Übersetzungsliste.

    Aufbau des Objekthashes
    #################
    | a => 'Adam'   |
    | w => 'Wall'   |
    | ....          |
    | -arg1 => 'arg'|
    | -arg2 => 'arg'|
    | ....          |
    #################
    arg - siehe config und new

Dazu werden die Daten (Kurzform-Langform Paare) aus einer Textdatei eingelesen oder direkt per new an den Objekt-Hash übergeben.

Der String der mittels der Methode translate umgewandelt werden soll, kann beliebig viele Kurzzeichen haben, diese müssen nur durch ein Leerzeichen getrennt sein.

Zeichenfolgen die keine Schlüssel-Wörter sind, werden unverändert übernommen.

Da diese Klasse zum Einsatz von Entry Feldern einer Tk GUI gedacht ist, kann die gleiche Methode (translate) die zum Übersetzen der Kurzformwörter verwendet wird auch zum Hinzufügen neuer Kurzform-Langform Paare benutzt werden.

Das bedeutet dass Ergänzungen dieser Übersetzungsliste ohne eine zusätzliche Funktionalität der Benutzeroberfläche (GUI) möglich sind.


Methods

Trk_dict->new(DATEINAME)

Ruft den Konstruktor auf und gibt ein neues Trk_dict Objekt zurück.

Wird mit -base ein Dateinamen einer Datei angegeben die nicht vorhanden ist, wird diese Datei automatisch erstellt.

Wird bei -base kein Dateiname angegeben, erfolgt keine Speicherung der Daten auf der Festplatte.

Example:

    $newojekt = TRK_dict->new(-base => 'Dateiname');

Ist die Datei leer wird das Objekt dennoch erstellt.

Zusätzlich können diverse Konfigurationen eingestellt werden, siehe Methode: config

Example:

    $newojekt = TRK_dict->new(-base => 'Dateiname', -save => 'off');

Es können auch Kurzwort-Langwort Paare direkt per Argument an new übergeben werden.

    $newojekt = TRK_dict->new(-base => 'Dateiname', -save => 'off', l => 'long');

Dabei ist aber zu beachten dass hier beispielsweise das l-long überschrieben werden würde, wenn sich in der zu ladenden Datei (-base...) bereits ein Schlüssel 'l' befindet !

Gibt man keine Dateinamen an z.B.

    $newojekt = TRK_dict->new(l => 'long');

wird -save automatisch auf 'off' gesetzt, da Veränderungen mangels Datei nicht auf der Festplatte gespeichert werden können.


$Obj->translate(String)

$Obj->append('Kurzform', 'Langform')

Diese Methode wird intern von der translate Methode dazu verwendet je nach eingestellten Optionen das Kurzwort-Langwort Wörterbuch zu ergänzen und die Daten auf der Festplatte abzuspeichern.

'append' kann aber auch als Objektmethode von 'außerhalb' aufgerufen werden um neue Datensätze anzufügen. Dies macht dann Sinn wenn beispielsweise Daten eingelesen werden und per Schleifenkonstrukt diese Daten angefügt werden sollen. Zudem ist es hiermit möglich als Argument einen Hash oder ein Array mit Kurzwort-Langwort Paaren zu übergeben.

Es ist aber NICHT möglich mittels 'append' die Konfigurationsdateien zu verändern, dazu muss 'config' verwendet werden.

Example:

    my %hash = (s => 'Short', l => 'Long');    # per Hash;
    $obj->append(%hash);
    #oder per Array:
    my @arr = ('s','Short', 'l', 'Long');      # per Array
    $obj->append(@arr);
    #oder direkt:
    $obj->append(s => 'Short', l => 'Long');  # oder $obj->append('s','Short', 'l', 'Long');

$Obj->config(-argument => 'wert')

Mit dieser Methode kann die Konfiguration nachträglich, also nach dem Erzeugen des Objekts geändert werden.

Example:

    $newojekt->config(-save => 'off');
-base => 'Dateiname'
  • Der Name der Datei in der die Daten auf der Festplatte gespeichert werden.

  • -save =>
  • 'off' Änderungen werden nicht in der Datei gespeichert, sind also nur in der laufenden Sitzung aktiv
  • 'on' Änderungen werden in der Datei gespeichert (Standardeinstellung) - kann nicht aktiviert werden wenn bei der Instanzierung kein Dateiname übergeben wurde !

  • -add =>
  • 'off' add ist nicht aktiv. Es können also keine Kurzwort-Langwort Paare angefügt werden.
  • 'on' add ist aktiv (Standardeinstellung).

  • -overwrite =>
  • 'off' Ein Überschreiben bestehender Kurzwort-Langwort Einträge ist nicht möglich.
  • 'on' Ein Überschreiben bestehender Kurzwort-Langwort Einträge ist möglich.(Standardeinstellung).

  • -delete_single =>
  • 'off' Einzelne Zeichen werden nicht gelöscht.
  • 'on' Einzelne Zeichen werden gelöscht (Standardeinstellung).

    Example:

        $newojekt->config(-delete_single => 'off'); # 'Name n a' wird zu 'Name n a'
        $newojekt->config(-delete_single => 'on');  # 'Name n a' wird zu 'Name'

  • -translate_all =>
  • 'on' Es werden alle gleichen Kurzwörter durch die entspechenden Langwörter ersetzt.
  • 'off' Es wird nur das erste vorkommende Kurzwort durch das entspechende Langwort ersetzt (Standardeinstellung).
        # c => car
        # -delete_single => 'off'
        $newojekt->config(-translate_all => 'off'); # ' c c  c' wird zu 'car c c'
        $newojekt->config(-translate_all => 'on');  # ' c c  c' wird zu 'car car car'

  • -delete_whitespace =>
  • 'on' Es werden alle doppelten oder mehrfachen Leerzeichen entfernt (Standardeinstellung).
  • 'off' Leerzeichen werden nicht verändert (außer am Anfang und Ende)
        # c => car
        $newojekt->config(-delete_whitespace => 'on');  # ' c   Ford' = 'car Ford'
        $newojekt->config(-delete_whitespace => 'off'); # ' c   Ford' = 'car   Ford'

  • $Obj->get_dictionary

    Gibt eine nach den Schlüsselwörtern(Kurzwörter) sortierte Liste aller Kurzwort => Langwort Paare in Form eines Arrays zurück.

    Damit lassen sich von einem Frontend aus Infofenster generieren.

    Der Aufbau ist folgender:

    $array[0] = ('kurzform1 => langform1')

    $array[1] = ('kurzform2 => langform2')

    ...


    $Obj->get_config(optional)

    Gibt ohne Argument eine sortierte Liste aller Konfigurationen in Form eines Arrays zurück.

    Der Aufbau des Arrays ist der gleiche wie bei get_dictionary.

    Wenn ein Argument gesetzt wird, wird nur der Inhalt der betreffenden Config zurückgegeben.

    Example:

        $foo = $Obj->get_config('-add');   # $foo = 'on' oder 'off'

    $Obj->get_error_message

    Gibt im Falle eines Fehlers eine Fehlermeldung zurück.

    Wird bei jedem weiteren Methodenaufruf gelöscht, muss also unmittelbar nach einem Methodenaufruf abgefragt werden.

    Example:

        $foo = $obj->get_error_message();   # $foo = "error text....."


    Aufbau der Textdatei

    Zeile 1 = erster Schlüssel (Kurzform)

    Zeile 2 = erster Wert (Langform)

    ...

    Example:

        # a
        # adam
        # b
        # berta


    Exports

    Ein Exporter wird nicht verwendet.


    ToDo

    Testen, Testen, Testen .....


    Abhängigkeiten

    Keine, das Modul benötigt keine Biblioteken


    Kompatibilität und Tests

    Getestet wurde das Modul bisher mit Perl 5.14.2

    Das folgende Script kann ohne weitere Abhängigkeiten zum Testen der Methoden verwendet werden.

        #!/usr/bin/perl
        use strict;
        use v5.12;          # wird nur für say benötigt
        use warnings;
        use Trk_dict_oop;
        # Testprogramm zum Testen von Trk_dict_oop
        sub menue {
            say "Testprogramm";
            say "------------\n";
            say "'menue' zeigt dieses Menue nochmal";
            say "'config' zeigt alle Konfigurationen an";
            say "'config...' ruft config auf z.B config -save => 'on'";
            say "'ende' beendet das Programm";
            say "'wörterbuch' zeigt die Kurz-Langform liste";
            say "'error ?' zeigt eine Fehlermeldung";
            say "'append...' fügt ein einzelnes neues Paare hinzu z.B. append e => emil\n";
            say "Alle anderen Eingaben werden direkt und ungefiltert an translate übermittelt\n";
            say "Dass eine Eingabe von translate verarbeitet wurde erkennt man daran dass die\nAusgabe innerhalb von einem >und< Zeichen ist\n\n";
        }
        #  ----------------Main-------------------------------------------------
        my @array;
        my $obj = Trk_dict-> new(-base => 'test',w => 'walter');
        menue();
        while (1){
            chomp (my $eingabe = <>);
            if ($eingabe eq 'ende'){last}
            elsif ($eingabe eq 'wörterbuch'){
                @array = $obj->get_dictionary();
                foreach (@array){
                    say
                }
                say "\n\n";
            }
            elsif ($eingabe eq 'menue'){menue()}
            elsif ($eingabe eq 'config'){
                @array = $obj->get_config();
                foreach (@array){
                    say
                }
                say "\n\n";
            }
            elsif ($eingabe =~ /\Aconfig /){
                $_ = $eingabe;
                s/config //g;
                @array = split / => /, $_;
                $array[1] =~ s/\'//g;;
                $_ = $obj->config($array[0], $array[1]);
                if ($_ eq "ERROR"){say $obj->get_error_message()}
                else {say}
                say "\n\n";
            }
            elsif ($eingabe =~ /\Aappend /){
                $_ = $eingabe;
                s/append //g;
                @array = split / => /, $_;
                $array[1] =~ s/\'//g;
                $obj->append($array[0], $array[1]);
                @array = $obj->get_dictionary();
                foreach (@array){
                    say
                }
                say "\n\n";
            }
            elsif ($eingabe eq 'testlauf'){
                testlauf()
            }
            elsif ($eingabe eq 'error ?'){
                my $ausgabe = $obj->get_error_message();
                if ($ausgabe) {say $ausgabe}
                else {say "Keine Fehlermeldung vorhanden"}
                }
            else {
                my $ausgabe = $obj->translate($eingabe);
                if ($ausgabe) {say ">$ausgabe<"}
                else {say "><"};
            }
    }


    VERSION

    Version 0.1 letzte Änderung 30.05.2014