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

Messdaten aus Datei lesen und verarbeiten

 

gomatlab
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 12.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2018, 11:26     Titel: Messdaten aus Datei lesen und verarbeiten
  Antworten mit Zitat      
Hallo,

das ist der Inhalt der Datei "Datei.txt":
Code:
Ort.X: 36.00 m
Ort.Y: 28.00 m
Ort.Z: 171.00 m
Strecke.X: 24.00 m
Strecke.Y: 18.00 m
Stepsize.X: 2.00 m
Stepsize.Y: 3.00 m

 
Daten: Geschwindigkeit
Einheit: m/s
140.958E+0   140.892E+0   141.024E+0
140.886E+0   140.838E+0   140.568E+0
140.700E+0   141.108E+0   141.090E+0
 
 
Daten: Beschleunigung
Einheit: m/s^2
913.266E-3   914.458E-3   918.988E-3  
913.981E-3   916.127E-3   921.253E-3
936.154E-3   939.850E-3   933.770E-3


Ich brauche daraus die Angaben der ersten 7 Zeilen, aber jeweils nur die Dezimalzahlen ohne Text und Einheit. Außerdem brauche ich den Inhalt der zwei Matrizen jeweils als array.

Das lesen der Matrizen klappt im Prinzip mit folgendem code:
Code:
clear
clc

Geschwindigkeit = dlmread("Datei.txt", '\t',[11,0,13,2]);
Beschleunigung = dlmread("Datei.txt", '\t',[18,0,20,2]);


Das Problem ist, dass ich dazu immer die Position der Matrizen von Hand angeben muss und die Werte ändern sich bei anderen Matrizengrößen. Die Größe der Matrix ergibt sich aber aus Strecke.X und Stepsize.X bzw. analog für Y. Deshalb brauche ich die Werte.

Ich möchte ein Programm haben, das möglichst ohne manuelle Änderungen am Code, automatisch die Daten korrekt aus der Datei liest und verarbeitet. Dabei muss eben berücksichtigt werden, dass die Anzahl der Messwerte von Datei zu Datei variiert.

Ich habe keine Ahnung wie man das am geschicktesten macht. Meine Idee ist, erstmal alle Zeilen (oder zumindest die ersten 7) einzulesen:
Code:
clear
clc

filename = "Datei.txt";
fid = fopen (filename, "r");
for k=1:21
  Zeileninhalt(k,:)=fgetl(fid);
endfor
fclose (fid);

Das scheitert daran, dass nicht alle Zeilen die gleiche Länge haben und ich scheitere daran, eine Lösung für das Problem zu finden.
Private Nachricht senden Benutzer-Profile anzeigen


AndyydnA

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2018, 12:38     Titel:
  Antworten mit Zitat      
Ich denke durch den komplexen Aufbau deiner Datei kommst du nicht umher, die Datei selbst zu parsen.

Ich würde die Datei mit "fileread" komplett einlesen und dann mit "regexp" den Matrix Block suchen. Ist das Problem noch aktuell (nach 5 Tagen) oder hast du schon eine Lösung?

Gruß Andy
 
gomatlab
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 12.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2018, 13:49     Titel:
  Antworten mit Zitat      
AndyydnA hat Folgendes geschrieben:
Ist das Problem noch aktuell (nach 5 Tagen) oder hast du schon eine Lösung?

Hi Andy, das Problem ist noch aktuell.
Private Nachricht senden Benutzer-Profile anzeigen
 
AndyydnA

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2018, 15:08     Titel:
  Antworten mit Zitat      
Code:

d = fileread ("Datei.txt");

function ret = key_pat (str, key)

  pat = sprintf ("(?<=%s.)([XYZ]): ([0-9]+.[0-9]+)", key);
  [~, ~, ~, ~, T] = regexp (str, pat);

  for k=1:numel (T)
    ret.(T{k}{1}) = str2num (T{k}{2});
  endfor

endfunction

Ort = key_pat (d, "Ort")
Strecke = key_pat (d, "Strecke")
Stepsize = key_pat (d, "Stepsize")

[~, ~, ~, M] = regexp (d, "(?<=Daten: Geschwindigkeit\nEinheit: m\\/s\n)[ \n0-9\\.E+-]*");
Geschwindigkeit = str2num(M{1})

[~, ~, ~, M] = regexp (d, "(?<=Daten: Beschleunigung\nEinheit: m\\/s\\^2\n)[ \n0-9\\.E+-]*");
Beschleunigung = str2num(M{1})
 


gibt zurück:

Code:

Ort =

  scalar structure containing the fields:

    X =  36.120
    Y =  28.230
    Z =  171.34

Strecke =

  scalar structure containing the fields:

    X =  24
    Y =  18

Stepsize =

  scalar structure containing the fields:

    X =  2
    Y =  3

Geschwindigkeit =

   140.96   140.89   141.02
   140.89   140.84   140.57
   140.70   141.11   141.09

Beschleunigung =

   0.91327   0.91446   0.91899
   0.91398   0.91613   0.92125
   0.93615   0.93985   0.93377
 


HTH, Andy
 
AndyydnA

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2018, 15:10     Titel:
  Antworten mit Zitat      
achso, noch als Anmerkung: ich habe ein paar Nachkommastellen in die Datei eingefügt umd das auch zu testen, daher hat "ort" oben welche
 
gomatlab
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 12.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2018, 15:20     Titel:
  Antworten mit Zitat      
Vielen Dank, das sieht sehr gut aus.
Jetzt brauche ich ein wenig Zeit, um den Code zu verstehen. Dann werde ich sicher Fragen haben und mich nochmal melden Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
AndyydnA

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.06.2018, 15:26     Titel:
  Antworten mit Zitat      
also Kernstück ist ja immer regexp.

Falls du reguläre Ausdrücke noch nicht kannst, empfehle ich dir das wirklich wärmstes zu lernen.

Die Seite ist wirklich gut: https://www.regular-expressions.info

und hier kann man "live" damit spielen, auch sehr zu empfehlen: http://regex101.com/

Viel Erfolg, Gruß Andy

PS: Ich bin die nächsten 2 Wochen in Urlaub, schaue morgen nochmal rein und dann bin ich offline
 
AndyydnA

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2018, 18:15     Titel:
  Antworten mit Zitat      
Ist die Frage noch nicht beantwortet?
 
gomatlab
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 12.06.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.06.2018, 11:19     Titel:
  Antworten mit Zitat      
AndyydnA hat Folgendes geschrieben:
Ist die Frage noch nicht beantwortet?

Kann ich noch nicht sagen, da ich noch keine Zeit hatte den Code zu verstehen.
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 - 2024 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.