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

Textdatei mit fscanf ab bestimmter Zeile auslesen

 

kohli311
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 09.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2016, 08:53     Titel: Textdatei mit fscanf ab bestimmter Zeile auslesen
  Antworten mit Zitat      
Hallo zusammen,

ich habe Datenreihen in txt.-Dateien vorliegen, welche ich mit Matlab auswerten möchte. Ich brauche allerdings von den Daten nicht alles, sondern nur bestimmte Bereiche, d.h. einen Abschnitt mit bestimmter Anzahl an Zeilen.
Bislang habe ich den interessierenden Bereich im txt.-file immer ausgschnitten und ganz vorne eingefügt. So brauchte ich in Matlab dann nur noch die Anzahl an Zeilen angeben, die ich benötige. Aber so langsam wird mir das zu doof, da ich viele dieser Dateien habe. Hat jemand eine Lösung, wie ich fscanf benutze und damit einen interessierenden Abschnitt auslese? Danke schon mal.
Nur zur Info noch, die txt.-Dateien haben so einen doofen Header, den Matlab sowieso erstmal ignorieren soll. Das ganze file mit Header einlesen geht also nicht.

Code:

fid = fopen('Drehmoment.txt','r');
M = fscanf(fid,'%f%f',[2,4875]);



Grüße
kohli311
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.11.2016, 12:22     Titel: Re: Textdatei mit fscanf ab bestimmter Zeile auslesen
  Antworten mit Zitat      
Hallo kohli311,

Wie ist der gewünschte "Bereich" definiert? Wie ist das Text-File aufgebaut? Weißt Du genau, wie viele Header-Zeilen am Anfang stehen oder sind sie irgendwie gekennzeichnet.

Die grundsätzlichen Schritte sind:
1. File öffnen.
2. Die Header-Zeilen einlesen lassen (und ignorieren)
3. Den gewünschten Bereich finden - vielleicht die gewünschte Anzahl von Zeilen mit fgetl einlesen und ignorieren.
4. Daten einlesen, vielleicht mit fscanf .
5. File schließen.

Für konktrete Tipps werden konkrete Angaben benötigt.

Gruß, Jan

Zuletzt bearbeitet von Jan S am 29.11.2016, 13:21, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
kohli311
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 09.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.11.2016, 13:02     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke schon mal für deine Antwort. Das txt.-file wird von Ansys Maxwell erstellt und sieht aus wie im angehängten jpg zu sehen. Zudem ist dort auch die Darstellungsweise der Daten zu sehen. Es gibt zwei Spalten: Erste Spalte die Zeit, zweite Spalte wie hier z.B. eine Spannung in Volt. Ich brauche davon eigentlich nur die Spannungswerte für einen bestimmten Bereich.

Im Prinzip würde ich gerne in Matlab eingeben, dass das txt.-file ab Zeile XX für eine Anzahl an XX Zeilen in Spalte 2 eingelesen wird. Die Größe des interessierenden Datenbereichs variiert nämlich je nach untersuchter Variable.
Ich hoffe das hilft weiter.


Grüße
kohli311

Header_und_Daten.JPG
 Beschreibung:

Download
 Dateiname:  Header_und_Daten.JPG
 Dateigröße:  45.38 KB
 Heruntergeladen:  531 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.11.2016, 13:20     Titel:
  Antworten mit Zitat      
Hallo kohli311,

Screenshots sind nicht gut geeignet um Text-Files wieder zu geben. Poste in Zukunft Texte lieber als Text. Danke!

Zitat:
Im Prinzip würde ich gerne in Matlab eingeben, dass das txt.-file ab Zeile XX für eine Anzahl an XX Zeilen in Spalte 2 eingelesen wird. Die Größe des interessierenden Datenbereichs variiert nämlich je nach untersuchter Variable.

Und wie wird die Größe der einzulesenden Daten festgelegt? Dynamisch während des Lesens oder weißt Du das vorher?

Wenn ich Deinen Screenshot richtig verstehe, möchtest Du immer die ersten 7 Zeilen ignorieren, richtig? Dann nimm doch mal das Grundgerüst aus meiner vorherigen Antwort und probiere das mal aus.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
kohli311
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 09.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.12.2016, 16:03     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke nochmal für deine letzte Antwort.

Also der Header sieht immer gleich aus (diese 7 Zeilen). Ich habe auch immer zwei Spalten. In Spalte 1 stehen immer Zeitwerte, in Spalte zwei stehen immer Spannungs-, Stromwerte oder ähnliches.
Es handelt sich hierbei um Simulationswerte aus dem Programm Maxwell. Für diese Simulation lege ich zuvor selbst fest wie groß die Zeitschrittweite und nach welcher Zeit die Simulation beendet ist. Ich kenne also bereits vor dem Öffnen des txt-files die Anzahl an Spalten und Zeilen.
Ich weiß auch zuvor ab welcher Zeile ich die Werte einlesen möchte (z.B. 5000) und für wie viele Zeilen (z.B. 2000). Ich möchte also in Matlab die Simulationswerte aus der txt-Datei ab Zeile 5000 in einer 2x2000 Variable speichern, um mit dieser Variable dann weiterarbeiten zu können.

Ich bekomme das nur noch nicht in Matlab umgesetzt. Deine Tipps waren schon mal nicht schlecht, aber ich bekomme z.B. das mit dem Ignorieren des Headers nicht hin.

Bei
Code:

fid = fopen('Drehmoment.txt','r');
M = fscanf(fid,'%f%f',[2,4875]);

bleibt "M" einfach nur leer [].

Ich hoffe das beschreibt es nun etwas besser.


Grüße,
kohli311
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.12.2016, 21:05     Titel:
  Antworten mit Zitat      
Hallo kohli311

Code:
fid = fopen('Drehmoment.txt','r');
if fid == -1
  error('Cannot open file');
end

% Skip the header lines:
for k = 1:7
  fgetl(fid);
end

M = fscanf(fid,'%f%f',[2,4875]);

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
kohli311
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 09.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2016, 16:43     Titel:
  Antworten mit Zitat      
Danke Jan, das ist genau das was ich wollte.
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.