MATLAB - Textdaten mittels reglärem Ausdruck in zwei Teile zerlegen

OP #4491446
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
#4492868
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".

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren