Forum: PC-Programmierung MATLAB - Textdaten mittels reglärem Ausdruck in zwei Teile zerlegen


von Guido C. (guidoanalog)


Lesenswert?

Hallo,

ich habe Textdateien mit Messdaten. Die Daten umfassen zwei Teile. Der 
zweite Teil der Daten wird mit "Begin part II" eingeleitet.
1
...
2
a = 100
3
b = 200
4
Begin part II
5
No.  Current
6
1  10.5
7
2  10.6
8
3  7
9
...

Zur leichteren Auswertung möchte ich die Daten aufteilen. Hierfür lese 
ich die Daten zunächst in Matlab wie folgt ein:
1
Data = fscanf(fid,'%c');

Im nächsten Schritt trenne ich die Datenbereiche mittels Regulärem 
Ausdruck auf.
1
SplitData = regexp(Data,'[\n\r][ \t]*Begin part II[ \t]*[\n\r]','split')

Mein Problem ist, dass der oben aufgeführten Reguläre Ausdruck sowohl 
unter Windows wie auch unter Linux und MaxOS funktionieren sollte. 
Bekanntlich sind bei diesen Systemen die Zeilenumbrücke unterschiedlich.
https://de.wikipedia.org/wiki/Zeilenumbruch#Codierung_des_Zeilenumbruchs

Meine Frage an Euch, ist der Ansatz mit
1
'[\n\r][ \t]*Begin part II[ \t]*[\n\r]'
richtig? Oder habe ich etwas übersehen?
Wäre ggf. der folgende Ausdruck sinnvoller?
1
'[\r\n]?[\n]?[r]?[ \t]*Begin part II[ \t]*[\r\n]?[\n]?[r]?'

Abschließend noch ein Hinweis, Kommentarzeilen der Art
1
//Begin part II
sollten nicht erkannt werden.

Mit freundlichen Grüßen
Guido

von Guido C. (guidoanalog)


Lesenswert?

Hallo,

ich sehe gerade, der Ausdruck
1
'[\r\n]?[\n]?[r]?[ \t]*Begin part II[ \t]*[\r\n]?[\n]?[r]?'
wird nicht ordnungsgemäß funktionieren, da er auch 'Begin part II' in 
Kommentarzeilen erkennen würde.

Mit freundlichen Grüßen
Guido

von J.-u. G. (juwe)


Lesenswert?

Ich würde mir die Rumhantiererei mit regulären Ausdrücken ersparen und 
matlabeigene Stringvergeichsfunktionen verwenden, z.B. "strncmp"

Eine Abgrenzung der beiden Teile könnte mit:
1
line = fgets(fid);
2
B = strncmp('Begin part II',line,13)
vorgenommen werden.

B ist "true" wenn die ersten 13 Zeichen der eingelesenen Zeile dem 
Muster entsprechen. Auskommentierungen liefern "false".

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.