Benutzer mit den meisten Antworten
Datei richtig lesen zur Verarbeitung

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 MessungIn 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 MessungHier 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
- Bearbeitet Robert BreitenhoferModerator Donnerstag, 20. Dezember 2012 15:58 Formatierung
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- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 20. Dezember 2012 15:55
-
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/
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 20. Dezember 2012 15:55
Alle 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- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 20. Dezember 2012 15:55
-
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/
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 20. Dezember 2012 15:55
-
Hallo Bruce89,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.