Hallo ich stehe ziemlich auf dem Schlauch und komme nicht vorran. Ich soll für ein Projekt in meinem Praxissemester eine Textdatei Spaltenweise auslesen. Nur ist diese total eigenartig formatiert und man darf sie nicht ändern.
Hier mal ein auszug aus der Textdatei:
' Codetraeger- Laenge Format Dialog-
' Variable in Bytes Variable
' Werkzeugdaten
Item1 32 ASCII T1 ' Bezeichner
Item2 4 BCD T2 ' Duplo
Item3 2 BCD T4=(Tet1),T5=(Tet2),T6=(Tet3),T7=(Tet4)
' WZ-Groesse: links rechts oben unten
Item4 32 ASCII T8 ' Platztyp
Item5 2 BCD T9 ' Status
Item6 2 BCD T3 ' Anz. Schneiden
Item7 2 BCD T10 ' Art der WZ-Uebrwachung
Item8 2 BCD T11 ' Art der WZ-Suche
' Anwender - Wekzeugdaten
Item9 4 REAL A1 ' OEM1 Anwender Werkzeugdaten
Item10 4 REAL A2 ' OEM2 Anwender Werkzeugdaten
Item11 4 REAL A3 ' OEM3 Anwender Werkzeugdaten
Item12 4 REAL A4 ' OEM4 Anwender Werkzeugdaten
Item13 4 REAL A5 ' OEM5 Anwender Werkzeugdaten
Item14 4 REAL A6 ' OEM6 Anwender Werkzeugdaten
Item15 4 REAL A7 ' OEM7 Anwender Werkzeugdaten
Item16 4 REAL A8 ' OEM8 Anwender Werkzeugdaten
Item17 4 REAL A9 ' OEM9 Anwender Werkzeugdaten
Item18 4 REAL A10 ' OEM10 Anwender Werkzeugdaten
Ich soll nun zB die Spalte DialogVariable und Bezeichner rauslesen.
Habt ihr eine Idee? Vielen Dank schon mal.
Textdateien werden zeilenweise geschrieben. Man kann sie daher auch nur zeilenweise auslesen. Du musst also jede Zeile nehmen und daraus die einzelnen Spalten extrahieren.
Ok und wie kann ich dann in den jeweiligen Zeilen vernünftig nach Spalten gliedern? Ich hab in dem Textdokument ja leider keine einheitlichen Trennzeichen. Sind mal Tabs und mal Leerzeichen.
Deshalb komm ich mit Split auch nicht weiter.
Du kannst bei Split auch ein Array mit verschiedenen Trennzeichen übergeben.
Schau in der Dokumentation nach.
Ich hab in dem Textdokument ja leider keine einheitlichen Trennzeichen. Sind mal Tabs und mal Leerzeichen.
Dann musst du dem eins auf die Kappe geben der die Datei erstellt hat. Den Aufbau der Datei mit all ihren Besonderheiten kennst du am besten, entsprechend diesem Aufbau musst du das auseinander nehmen. Das kann kein fertiger Code im Voraus wissen 😃
split hilft dir hier nicht weiter leider. du kannst nur zeilenweise parsen und mit regex filtern. Ein Beispielhaftes Pattern wäre z.b.
\s*(Item[\d]*)\s*([\d]*)\s*([\w]*)\s*([\w\d=\(\)]*)\s*[']\s([\w\s.-]*\n)
allerdings musst du noch den spezialfall prüfen für "Item3 2 BCD T4=(Tet1),T5=(Tet2),T6=(Tet3),T7=(Tet4) ". Da dies natürlich ausm Rahmen fällt. Aber bisle was sollst ja auch tun 😃
Hey,
wenn du String.Split mit null oder einem leeren Array aufrufst, werden alle Whitespace-Zeichen genommen.
Ich würde es also so hier probieren:
// strip comments
int comment_start = line.IndexOf('\'');
if(comment_start >= 0)
line = line.Substring(0, comment_start);
// skip empty lines and lines with comments
if(line.IsNullOrWhiteSpace())
continue; //oder return, oder was anderes...
string[] data = line.Split(null as char[], StringSplitOptions.RemoveEmptyEntries)
beste Grüße
zommi
perfekt danke für eure Hilfe ich werds morgen gleich probieren und melde mich nochmal 😃