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

txt.-Datei OHNE Header einlesen

 

veko
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2013, 17:43     Titel: txt.-Datei OHNE Header einlesen
  Antworten mit Zitat      
Hallo, ich habe ein Problem. Ich möchte eine txt.-datei einlesen um dann mit den darin enthaltenen Werten weiter zuarbeiten - aber ohne den Header (der vor den in der txt.-datei relevanten Daten kommt) - .
Die Datei hat dieses Format:

1 header
2 header
3 0,256 0,1235
4 0,658 0,1245
.
.
.
80 1,344 0,1887

Mein bisheriger code
Code:

w =importdata('messdata.txt');
 

gibt mir nur ein struct aus.
Und hier weis ich nicht wie das struct am besten, ohne Header, ausgelesen werden kann.
Über eine Schleife in der ich die Spalte und die Zeilen definiere, die für mich relevant sind und somit der Header unberücksichtigt bleibt?

Ich hoffe ich konnte mein Problem verständlich darstellen und bitte um hilfreiche Tipps Smile

Vg
veko
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.10.2013, 17:47     Titel:
  Antworten mit Zitat      
Hallo,

wenn deine Datei tatsächlich Kommas als Dezimaltrennzeichen verwendet, dürfte das einfachste sein, das Import Tool zu verwenden (Rechtsklick auf die Datei --> Import Data).

Ansonsten: mit einem der online verfügbaren Skripte zunächst alle Kommas in Punkte umwandeln und die Datei dann mit textscan einlesen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
veko
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2013, 18:25     Titel:
  Antworten mit Zitat      
Hallo Harald,
ja leider werden Kommata anstatt Punkte verwendet.

um das ganze umzuwandeln wollte ich diese Befehle verwenden:

Code:

comma   = uint8(',');
point   = uint8('.');
file.Data(( file.Data==comma)' ) = point;
 


aber das hilft mir ja noch nicht weiter, die eigentlich Datei aus dem struct zu lesen und dabei den Header zu ignorieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.10.2013, 18:45     Titel:
  Antworten mit Zitat      
Hallo,

hast du den ersten Vorschlag probiert?

Hast du es mit textscan (und 'headerlines') statt importdata probiert?

Der von dir angegebene Code sieht aus, als würdest du mit memory mapped files arbeiten wollen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
veko
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2013, 18:54     Titel:
  Antworten mit Zitat      
ja, der Befehl sieht so aus:
Code:
a = textscan(textdata,'HeaderLines',84);

die 84 steht für die Anzahl der Zeilen die überlesen werden sollen bis die eigentlichen Daten kommen.
Jedoch habe ich mehrere Datensätze und würde es gerne über einen Befehl "automatisch" einlesen und nicht über "import data" was zweifels ohne ein guter Tipp ist Smile

vielen Dank für deine Hilfe!
VG
veko
Private Nachricht senden Benutzer-Profile anzeigen
 
veko
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2013, 19:16     Titel:
  Antworten mit Zitat      
vielen Dank für den Code.
So ähnlich hatte ich ihn auch schonmal stehen, jedoch kam, genauso wie jetzt, diese Fehlermeldung:
??? Undefined function or method 'eq' for input arguments of type 'struct'.
hast du eine Ahnung wo da der Fehler liegen könnte?

Vg
veko
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.10.2013, 19:43     Titel:
  Antworten mit Zitat      
Hallo,

üblicherweise würde ich textscan auf einen File Identifier anwenden.

Du kannst doch mehrere Befehle in ein Skript bzw. eine Funktion zusammenfassen und das Einlesen so automatisieren?

Ist der Kommentar von 19:16 in den falschen Thread gerutscht? Ich verstehe zumindest nicht, worauf er sich beziehen soll.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
veko
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2013, 20:13     Titel:
  Antworten mit Zitat      
Hallo Harald,
nein der gehörte hier her.
Diese Fehlermeldung: ??? Undefined function or method 'eq' for input arguments of type 'struct'. kommt wenn ich diesen code durchlaufen lasse
Code:
function comma2point(File)
 % Generate a new file named Oldfilename_Modified.ending. In the new File all
 % ',' are changed to '.' Needs a full datapath and filename as input.

 file = memmapfile(burst1000hz,'Writable',true);
 comma = uint8(',');
 point = uint8('.');
 file.Data(( file.Data==comma)' ) = point;
 delete(file)
 


VG
veko
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.10.2013, 20:48     Titel:
  Antworten mit Zitat      
Hallo,

was soll burst1000Hz denn in diesem Code sein?
Wie rufst du comma2point auf?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
veko
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 13.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2013, 21:09     Titel:
  Antworten mit Zitat      
Ich hatte gedacht mit
Code:
comma2point(File)

bekomme ich es hin die kommata in Punkte umzuwandeln.
Das unterprogramm sieht folgendermaßen aus:

Code:
a = dir('messdata.txt');
function comma2point(File)
 % Generate a new file named Oldfilename_Modified.ending. In the new File all
 % ',' are changed to '.' Needs a full datapath and filename as input.

 file = memmapfile(a,'Writable',true);
 comma = uint8(',');
 point = uint8('.');
 file.Data(( file.Data==comma)' ) = point;
 delete(file)

 end
 


aber funktionieren tut es nicht. Matlab spuckt die Fehlermeldung:"Function definitions are not permitted at the prompt or in scripts." aus.

VG
veko
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.10.2013, 21:36     Titel:
  Antworten mit Zitat      
Hallo,

eine Funktion muss immer in einer separaten Datei stehen. Die Originalfunktion sah vermutlich so aus, jedenfalls wäre das sinnvoll:

Code:
function comma2point(File)
 % Generate a new file named Oldfilename_Modified.ending. In the new File all
 % ',' are changed to '.' Needs a full datapath and filename as input.

 file = memmapfile(File,'Writable',true);
 comma = uint8(',');
 point = uint8('.');
 file.Data(( file.Data==comma)' ) = point;
 delete(file)

 end


Sinnvolle Aufrufe wären dann:
Code:
comma2point('messdata.txt')


oder für mehrere Dateien auf einmal
Code:
list = dir('*.txt');
for I = 1:numel(list)
fname = list(I).name;
comma2point(fname)
end


Ich würde eine gründliche und systematische Einarbeitung insbesondere in Funktionen empfehlen.

Grüße,
Harald
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.