WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Bestimmten Text auslesen - REGEXP

 

Yardbird
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 20.08.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2020, 10:52     Titel: Bestimmten Text auslesen - REGEXP
  Antworten mit Zitat      
Hallo zusammen,

ich möchte einen bestimmten Text in einer Datei finden und in dieser Zeile 4 Werte herauslesen, welche in eine separate Datei geschrieben werden. Zur Verdeutlichung habe ich ein Bild angehangen. Hier ist die Dateistruktur zu sehen. Im Prinzip brauche ich die Zeilen wo eine 13 steht gefolgt (mit mehreren Leerzeichen getrennt) von |Y.

Momentan versuche ich diese Zeilen zu finden und orientiere mich an verschiedene Posts hier im Forum, aber in erster Linie an diesen Post hier:
https://in.mathworks.com/matlabcent.....tring-and-return-the-line

Wende ich den Befehl find(~cellfun(@isempty,strfind(meintext,'13') an dann findet er halt alle Zeilen mit 13.
Jetzt habe ich aber einen viel besseren Weg gefunden mit regexp, leider habe ich Probleme mit der Expressionformulierung.

ergebnis=regexp(meintext, '13/s|Y'):

mit '13/s|Y' dachte ich sucht er mir nur die richtigen Zeilen raus, also die mit ner 13 gefolgt von |Y (siehe Screenshot). Leider sucht er mir irgendwie auch andere Zeilen raus.

1.Wie muss die Formulierung lauten, dass er nur Zeilen mit einer (freistehenden) 13 gefolgt von |Y raussucht?
2. Wie bekomme ich die entsprechenden Werte in der Zeile in eine separate Datei?

Vielleicht gibts auch einen einfacheren Weg, auf den ich noch nicht gekommen bin.

Vielen Dank für die Hilfe,
Gruß Felix

Beispiel.PNG
 Beschreibung:

Download
 Dateiname:  Beispiel.PNG
 Dateigröße:  291.03 KB
 Heruntergeladen:  215 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.08.2020, 11:14     Titel:
  Antworten mit Zitat      
Hallo,

reguläre Ausdrücke sind zwar mächtig, überfordern mich zumindest aber regelmäßig.

Das Format der Datei scheint sehr einheitlich zu sein, insbesondere scheint die Anzahl der Leerzeichen und die Zeichen, die die Zahlen bilden, immer gleich zu sein. Ich würde also:

1. zeilenweise mit fgetl einlesen
2. mit contains überprüfen, ob die Zeile die richtige ist. Alternativ direkt die Zeichen der Zeile vergleichen
3. die Zeichen für X, Y, Z etc. in Zahlen umwandeln und in Vektoren abspeichern
4. Aus den Vektoren einen Table machen und mit writetable abspeichern.

Alternative zu 1. kann auch sein, das als Table zu importieren. Müsste man probieren, wie gut das geht.

Wenn du die Datei als Text statt als Screenshot postest, kann man viel leichter damit experimentieren.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Yardbird
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 20.08.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2020, 11:34     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für die Hilfe. Das werde ich mal probieren. Anbei habe ich die Datei im TXT Format angehängt.

Gruß
Felix

Beispieltxt.txt
 Beschreibung:

Download
 Dateiname:  Beispieltxt.txt
 Dateigröße:  3.43 KB
 Heruntergeladen:  187 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.08.2020, 12:50     Titel:
  Antworten mit Zitat      
Hallo,

so auf die Schnelle:

Code:
content = strsplit(fileread('Beispieltxt.txt'), newline)';
isRelevant = contains(content, '13           |Y');
content = char(content(isRelevant));
n = cellstr(content(:, 22:25));
x = cellstr(content(:, 54:66));
T = table(n, x)
writetable(T, 'nx.txt')


Für y und z musst du noch zählen Wink

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.