Textdatei mit bestimmten aufbau auslesen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von IL Veltro.

    Textdatei mit bestimmten aufbau auslesen

    Ahoi Forum!

    Ich habe ein kleines Problem. Kenne mich leider nicht gut genug aus und wollte euch nach einer Vorgehensweise fragen;
    Ich möchte mir eine Textdatei auslesen die einen bestimmten aufbau hat:

    ******************************************************
    1,1,Name der Person
    1, 1, 1,Vorname
    1, 1, 2,Nachname
    1, 1, 3,Geburtsname
    ******************************************************
    1,2,Adresse der Person
    1, 2, 1,Straße
    1, 2, 2,Hausnummer
    1, 2, 242,Wohnort
    ******************************************************


    Nun möchte ich folgendes tun, die Datei auslesen, und "so" aufteilen wie ich es "brauche".

    Ich gebe z.B. in eine Textbox 1,1 ein und möchte nun alle Werte angezeigt bekommen die in "1,1" vorhanden sind -> 1,1 heißt also "Name der Person"
    und nun möchte ich, abgesehen von dem Namen auch die Werte wie 1 (Vorname), 2(Nachname) ,3(Geburtsname) erhalten. Aber auch nur weil Sie 1,1 untergeordnet sind.

    Wisst ihr was ich erreichen möchte?

    Ich möchte einen direkten Überblick erhalten, nicht die TXT Datei öffnen und danach suchen. Es nervt mich ein wenig ehrlich gesagt, das ich in diesem Moment einfach zu viele Zahlen sehe :)

    Habt ihr eine Idee?


    Ich denke mir das man da sich ein Klasse Algorithmus ausdenken kann, nur weiß ich nicht genau wie. Ich bin über den Streamreader gestoßen.. aber..mhmh
    Wie kann ich mir das einlesen und richtig zerlegen?
    (Kann auch gerne ein Bild posten wie ich es mir vorstellen würde..)

    Mir geht es nicht um Sourcecodes, ich will nur wissen wie man da am besten vorgehen kann (mit welcher Klasse, und und und..)
    Wenn ihr allerdings schon etwas kleines habt könnt ihr das gerne (r)einwerfen.

    Grüße,
    Drahuverar
    Option Strict On!
    angenehmere Oberflächen wären ausserdem einfacher zu programmieren.
    Man muss sich allerdings Datenmodellierung antun, und akzeptieren, dasses sich hier um eine 1:n-Relation zwischen Kategorien und Werten handelt.
    gugge die relationale GrundIdee.
    Beachte, dass gegebenes Tut über 1:n hinausgeht, also auf m:n abzielt. Aber 1:n ist gewissermaßen mit-entwickelt.

    Gut, wenn das begriffen, kann man ein entsprechendes typisiertes Dataset aufsetzen, das Zeug da einlesen, und mit einem ParentChild-View präsentieren: also links die Kategorien, und rechts kommen dann alle Werte zu einer Kategorie.
    gugge vier Views-Videos
    damit muß man also keine Zahlen-Mengen eingeben, sondern kann bequem aus einer Combobox die verfügbaren Kategorien auswählen - etwa die Kategorie "1, 1, 1,Vorname" auswählen.

    Es gibt auch die Möglichkeit die hierarchische Kategorisierung zu berücksichtigen, indem man die Kategorien in einem Treeview präsentiert. Beruht auf demselben Prinzip (ParentChildView) wird aber komplizierter.
    Ich würde es einfach zeilenweise parsen - Ist nicht sonderlich elegant, aber es funktioniert.
    So sähe das ganze in C# aus (Sorry, habe sehr lange nicht mehr in VB geschrieben):

    Quellcode

    1. void gebePersonenDatenAus(string personenKennung, string Quelle)
    2. {
    3. string[] tZeilen = Quelle.Split('\n');
    4. for(int i=0;i<tZeilen.Length;i++)
    5. {
    6. if(tZeilen[i].StartsWith("*")) continue; //Überspringen
    7. if(tZeilen[i].StartsWith(personenKennung))
    8. {
    9. string tVorname, tName, tGeburtsName;
    10. tVorname = tZeilen[i+1].Substring(tZeilen[i+1].LastIndexOf(',')+1,
    11. tZeilen[i+1].Length-tZeilen[i+1].LastIndexOf(',')); //Vornamen extrahieren
    12. tName = tZeilen[i+2].Substring(tZeilen[i+2].LastIndexOf(',')+1,
    13. tZeilen[i+2].Length-tZeilen[i+2].LastIndexOf(',')); //Vornamen extrahieren
    14. tGeburtsName = tZeilen[i+3].Substring(tZeilen[i+3].LastIndexOf(',')+1,
    15. tZeilen[i+3].Length-tZeilen[i+3].LastIndexOf(',')); //Vornamen extrahieren
    16. //Erklärung: Die interessanten Daten jeder Zeile stehen hinter dem letzten Komma. So kann man sie mit SubString und LastIndexOf einfach extrahieren
    17. break; //Da die Daten gefunden wurden, kann hier die Schleife verlassen werden
    18. }
    19. }
    20. }


    Ich hoffe, es hilft ;)

    MfG,
    X-Zat / Mo

    EDIT:

    Den Code habe ich grob aus dem Kopf heraus geschrieben und nicht näher auf Fehler überprüft - Die Vorgehensweise sollte aber erkennbar sein :)