Martin M.: Perl Datenstruktur

Hi zusammen,

brauche einen Rat, wie ich am besten meine Datenstruktur in Perl machen soll.
Folgende Daten werde ich aus Dateien und Ausgaben von anderen Programmen erhhalten.

Hund - Dackel - Rauhaar - brau
Hund - Dackel - Glatthaar - schwarz
Katze - Perser - nackig - weiss
Maus - Feldmaus - na - na

Ich schätze Hash-Value-Key Methode wäre am besten, aber wie setze ich das um bei mehr als nur ein Key und ein Value? Und das am besten so, dass ich jederzeit noch "values" hinzufügen kann.
Ein kleines Beispiel wie ich die Daten abspeichern und abrufen kann wäre toll. Danke.

ciao,
Martin

  1. Hallo!

    Hund - Dackel - Rauhaar - brau
    Hund - Dackel - Glatthaar - schwarz
    Katze - Perser - nackig - weiss
    Maus - Feldmaus - na - na

    Mein Vorschlag wäre ein "Array of Hashes", z.B.:

      
    [ { tier => 'Hund',  art => 'Dackel', fell => 'Rauhaar', farbe => 'braun' },  
      { tier => 'Katze', art => 'Perser', fell => 'nackig',  farbe => 'weiss' },  
      ...  
    ]  
    
    

    Grüße, Skrilax

  2. brauche einen Rat, wie ich am besten meine Datenstruktur in Perl machen soll.
    Folgende Daten werde ich aus Dateien und Ausgaben von anderen Programmen erhhalten.

    Hund - Dackel - Rauhaar - brau
    Hund - Dackel - Glatthaar - schwarz
    Katze - Perser - nackig - weiss
    Maus - Feldmaus - na - na

    Ich schätze Hash-Value-Key Methode wäre am besten,

    Wieso? Was ist der key was ist der Value?
    Für mich sieht das erstmal nach einem AoA aus.

    Ein kleines Beispiel wie ich die Daten abspeichern und abrufen kann wäre toll. Danke.

    Das wäre wieder ein anderes Problem. komplexe Strukturen lassen sich erstmal nicht einfach abspeichern. Je nach Anwendung solltest du eine Datenbank in Betracht ziehen oder ein einfaches DB Modul, dass auf DBM aufbaut z.b. DB_File

    Struppi.

    1. brauche einen Rat, wie ich am besten meine Datenstruktur in Perl machen soll.
      Folgende Daten werde ich aus Dateien und Ausgaben von anderen Programmen erhhalten.

      Hund - Dackel - Rauhaar - brau
      Hund - Dackel - Glatthaar - schwarz
      Katze - Perser - nackig - weiss
      Maus - Feldmaus - na - na

      Ich schätze Hash-Value-Key Methode wäre am besten,

      Wieso? Was ist der key was ist der Value?

      hmm - ich möchte halt nachher auf die ziemlich einfach auf Tier, Gattung, Fell und Farbe (...) zugreifen - z.B.

      • geb mir alle hunde aus
      • geb mir alle glatthaar viecher aus
      • geb alles aus was Katze & weiss ist
      • ...

      Ich dachte der richtige Weg wäre sowas wie anonymisierte Hashes, wobei ich mich da wie gesagt bisher überhaupt nicht auskenne und das jetzt mal ausprobieren würde.

      Und mit speichern meinte ich während des progammlaufes speichern, so dass ich es sortieren (siehe oben) und auf den Bildschirm ausgeben kann.

      1. Wieso? Was ist der key was ist der Value?

        hmm - ich möchte halt nachher auf die ziemlich einfach auf Tier, Gattung, Fell und Farbe (...) zugreifen - z.B.

        • geb mir alle hunde aus
        • geb mir alle glatthaar viecher aus
        • geb alles aus was Katze & weiss ist
        • ...

        Das ist eine eindeutige Aufgabe für eine Datenbank. Wie du die Daten dann im Perlskript speicherst ist erstmal egal, es klingt aber nach wie vor nach einem Array.

        Ich dachte der richtige Weg wäre sowas wie anonymisierte Hashes, wobei ich mich da wie gesagt bisher überhaupt nicht auskenne und das jetzt mal ausprobieren würde.

        Deshalb hatte ich dir einen Link auf Perldoc gezeigt, dort werden komplexere Datenstrukturen beschrieben.

        Und mit speichern meinte ich während des progammlaufes speichern, so dass ich es sortieren (siehe oben) und auf den Bildschirm ausgeben kann.

        Das ist mir klar, genau dafür hatte ich dir Vorschläge gemacht.

        Struppi.

        1. Wieso? Was ist der key was ist der Value?

          hmm - ich möchte halt nachher auf die ziemlich einfach auf Tier, Gattung, Fell und Farbe (...) zugreifen - z.B.

          • geb mir alle hunde aus
          • geb mir alle glatthaar viecher aus
          • geb alles aus was Katze & weiss ist
          • ...

          Das ist eine eindeutige Aufgabe für eine Datenbank. Wie du die Daten dann im Perlskript speicherst ist erstmal egal, es klingt aber nach wie vor nach einem Array.

          Also ich hab das jetzt mal durchgelesen:

          Dein Link sagt u.a.:
          You cannot easily tie a multilevel data structure (such as a hash of hashes) to a dbm file. The first problem is that all but GDBM and Berkeley DB have size limitations, but beyond that, you also have problems with how references are to be represented on disk._ One experimental module that does partially attempt to address this need is the MLDBM module. Check your nearest CPAN site as described in perlmodlib for source code to MLDBM.

          Gefunden hab ich auch dazu - http://forum.de.selfhtml.org/archiv/2002/5/t11656/ - wird das dann nicht zu aufwendig mit dem DB_file für meine Aufgabe? Geht das nicht "einfacher"?

          Ausserdem frage ich mich, ob als Datenstruktur ...
          Hund - Dackel - Rauhaar - braun, weiss, grün
          nicht besser ist als das alles einzeln zu machen:
          Hund - Dackel - Rauhaar - braun
          Hund - Dackel - Rauhaar - weiss
          Hund - Dackel - Rauhaar - grün

          Wie bei dem Link von dir auch beschrieben.

          Ohjee - ich dachte das wäre einfacher.

          1. Gefunden hab ich auch dazu - http://forum.de.selfhtml.org/archiv/2002/5/t11656/ - wird das dann nicht zu aufwendig mit dem DB_file für meine Aufgabe? Geht das nicht "einfacher"?

            einfacher wäre vermutlich eine Datenbank, wie mysql. Kommt aber darauf an, inwieweit du Bock hast SQL zu lernen.

            Ausserdem frage ich mich, ob als Datenstruktur ...
            Hund - Dackel - Rauhaar - braun, weiss, grün
            nicht besser ist als das alles einzeln zu machen:
            Hund - Dackel - Rauhaar - braun
            Hund - Dackel - Rauhaar - weiss
            Hund - Dackel - Rauhaar - grün

            Weder noch, im Datenbanken Sprachjargon nennt man das normalisieren, in dem Fall würdest du mit zwei Tabellen arbeiten, eine für Tiere und eine für die Eigenschaften.

            Wie bei dem Link von dir auch beschrieben.

            Das ist eine Möglichkeit, wie du die Daten im Skript strukturierst. In deinem Fall z.b.

            my @daten = (  
            { art => 'hund', name => 'Dackel', fell => 'Rauhaar', attribute = [qw(braun, weiss grün)]}  
            );  
            
            

            Es kommt aber auch darauf an, was du mit den Daten machen willst.

            Ohjee - ich dachte das wäre einfacher.

            Naja, deine Datenstruktur ist halt komplex und komplexe Aufgaben sind oft nicht unbedingt einfach. Aber das gibt dir die Möglichkeit deine Perl Kenntnisse zu vertiefen.

            Struppi.