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 mit Sonderformat einlesen

 

gui_einsteiger
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 08.03.12
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 14.06.2012, 14:23     Titel: txt-Datei mit Sonderformat einlesen
  Antworten mit Zitat      
Hallo,

ich versuche gerade ein txt-File einzulesen. Dieses soll irgendwann automatisch über m-code funktionieren.

Momentan versuche ich, das File über den Import-Wizard einzulesen, dieser scheitert jedoch an dem Format bzw. ich bekomme nur im rechten Fenster meine Daten angezeigt.

ansonsten würde ich es gerne mit textscan probieren, weiß aber leider nicht wie ich da rangehen soll.

Meine Datei hat ungefähr folgendes Format:

4 Zeilen header (für mich unwichtig, müssen nicht gelesen werden)
ca. 10 Zeilen: Wert Wert String
unbekannt viele Zeilen: Wert Wert

also so:
0,5 0,5 Text
0,5 0,5 Text
0,4 0,4
0,3 0,3
...

Die einzelnen Werte sind mit Tabstops voneinander getrennt.
Von diesen Zeilen würde ich gerne jede Spalte der Wert in eine Matrix schreiben.

Wie mache ich das am besten?

Meine Datei öffne ich mit fid=fopen(...);
danach weiß ich leider nicht weiter.

Vielen Dank schonmal

gui_einsteiger
Private Nachricht senden Benutzer-Profile anzeigen


_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 15.06.2012, 06:56     Titel:
  Antworten mit Zitat      
Hallo gui_einsteiger,
und wo genau liegt das Problem mit textscan? Hast du dir die Beispiele in der Hilfe angeschaut? Die sind wirklich nicht zu verachten...

Hier ein kleiner Ansatz für dich, basierend auf dem Beispiel aus der Hilfe:

Code:

fid = fopen('scan1.dat');
C = textscan(fid, '%s %s', 'HeaderLines', 4, 'Delimiter', '\t');
fclose(fid);
 

Leider musst du das als String einlesen, weil die Zahlen mit Komma und nicht mit dem Punkt dargestellt werden und Matlab das dann nicht als float interpretiert.

Danach musst du das Komma durch den Punkt ersetzen und kannst es als float abspeichern.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
gui_einsteiger
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 08.03.12
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 15.06.2012, 08:16     Titel:
  Antworten mit Zitat      
Hallo,

ich habe jetzt mal folgendermaßen angefangen: ich nutze den in einem Post gefundenen Beitrag, um meine Kommas erst einmal alle durch Punkte zu ersetzten:

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.
   
    Name=textscan(File,'%s%s','delimiter','.');
    NewFile=strcat(Name{1}, '_Modified.',Name{2});
    copyfile(File, NewFile{1});
    file    = memmapfile(NewFile{1},'Writable',true);
    comma   = uint8(',');
    point   = uint8('.');
    file.Data(( file.Data==comma)' ) = point;
    delete(file)
end
 


Dies funktioniert schon mal problemlos. Danach nutze ich folgenden Befehl (danke an _Peter_)

Code:
c=textscan(fid,'%s %s %s %s','HeaderLines',4,'Delimiter','\t')


Jetzt bekomme ich jede Spalte in eine eigene Cell geschrieben und kann mir meine ersten beiden Spaltern herausziehen, die ich brauche.

Vielen Dank für die Hilfe, ich steh manchmal echt einfach auf dem Schlauch

gui_einsteiger
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 15.06.2012, 08:22     Titel:
  Antworten mit Zitat      
wenn du dies Kommas in Punkte umgewandelt hast, kannst du die zahlen auch direkt als float einlesen und musst das nicht über den string machen. Und wenn du wirklich nur die ersten beiden Spalten brauchst, kannst du dir die anderen sparen...

Das würde dann so aussehen:
Code:

c=textscan(fid,'%f %f %*s %*s','HeaderLines',4,'Delimiter','\t')  
 


%f -> wird direkt als floatwert eingelesen und du kannst damit Rechenoperationen starten.

%s -> Ein String wird eingelesen.

%*s -> Der String wird nicht eingelesen.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
gui_einsteiger
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 08.03.12
Wohnort: ---
Version: R2013b
     Beitrag Verfasst am: 15.06.2012, 08:39     Titel:
  Antworten mit Zitat      
Hey,

das ist genau das was ich brauche. Vielen Dank.

Vielen Dank
Gui_einsteiger
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.