none
Datei richtig lesen zur Verarbeitung RRS feed

  • Frage

  • Hallo zusammen,

    hab ein kleines Problem mit meinem Parser. Habe ein Datenquelle mit einigen tausend "Datenpacketen" die diese Struktur haben:

    /beginn Messung "Messung der Temperatur_tz._Temperatur hat 20 Grad"
    Datentyp_Name_bin_variabel xyz
    Adresse_Name_bin_variabel xyz
    \end Messung

    In dieser Datenquelle, möchte ich den String hinter Messung speichern, spliten bei "_tz." dann den Datentyp und die Adresse speichern.

    Habe bis jetzt zeilenweise gelesen, und mir meine Infos herrausgeschnitte. Jetzt aber als ich fertig war, habe ich bemerkt dass auch dieser Fall auftreten kann:

    /beginn Messung "Messung der Temperatur_st._dieser Text hier steht exemplarisch für den Messewert der
    hier generiert wird, der sich leider auch über eine Zeile hinaus erstrecken kann"
    SINT (Datentyp int)
    YXZ (Adresse)
    \end Messung

    Hier sieht man, dass die Unterscheidung mit den Zeilen nicht mehr klappt, da sich die Bezeichnungen über mehrere zeilen erstrecken können.

    Habt Ihr eine Idee wie ich die Daten jetzt sinnvoll verarbeiten kann. Wenn ich das komplette Paket lese zw \begin - /end, wird es schwer die Daten herrauszufiltern, da sich die Namen der Adresse und des Datentypes ändern können ...

    Hat jemand einen Tipp für mich Anfänger?

    Grüße, Andreas

    Mittwoch, 12. Dezember 2012 09:47

Antworten

  • Hallo Andreas,

    wenn sichergestellt ist, dass "Datentyp" und "Adresse" sich immer nur auf eine Zeile erstrecken, kannst Du ggfs. immer die letzten beiden Arrayelemente auslesen, alle übrigen dann als "Messung".

    Nur so als rudimentären Ansatz:

    string Values = "...";
    
    List<string> Werte = Values.Split( new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries ).ToList();
    
    int Arraylaenge = Werte.Count;
    string Messung  = "";
    foreach( var item in Werte.GetRange( 0, Arraylaenge - 3 ) )
    {
        Messung += item;
    }
    string Datentyp = Werte[ Arraylaenge - 2 ];
    string Adresse  = Werte[ Arraylaenge - 1 ];
    
    Fehlerprüfung, vorherige Prüfung der Anzahl der Arrayelemente, usw. musst Du natürlich noch einbauen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 12. Dezember 2012 11:56
    Moderator
  • Hallo,

    der "Name" der Messung steht, nach deinem Beispiel in Anführungszeichen. Dann kannst du die Anzahl der Anführungszeichen in der Zeile überprüfen wenn es 2 sind dann ist der Name auf einer Zeile. Wenn das Anführungszeichen nur einmal vorkommt, dann musst du alle nachfolgenden Zeilen auch mit als Namensteil betrachten, bis du das 2. Anführungszeichen findest.


    Koopakiller [kuːpakɪllɐ] http://koopakiller.ko.ohost.de/

    Mittwoch, 12. Dezember 2012 19:38
    Moderator

Alle Antworten