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

Dateien Einlesen

 

THMCA

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2010, 18:09     Titel: Dateien Einlesen
  Antworten mit Zitat      
Hallo,
Die Hilfedateien und lange Internetsuche haben mich noch nicht zum Ziel geführt, daher bitte ich um eure Hilfe:
Ich habe eine Datei deren Datenkolonnen ich als Matrix einlesen möchte. Die Datei hat einen Header von 8 String-Zeilen, danach kommen 17000 Zeilen nach diesem Schema:
Code:
   0.9965999999000004E+00   0.4455689999963370E-04   0.3355443200000000E-02   0.6629556124004630E-05


fscanf, fread und importdata hab ich schon probiert, aber ich bekomme nur eine leere Matrix als Antwort und weiß nicht, wo der Fehler liegt. Vielen Dank schon mal!

Christian


ppirokke
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 64
Anmeldedatum: 19.11.10
Wohnort: ---
Version: R2010a
     Beitrag Verfasst am: 09.12.2010, 19:59     Titel:
  Antworten mit Zitat      
Hi,

hast du auch textscan schon probiert?

FeLe hat quasi eine identische Frage gehabt, so wie ich dich verstehe:
http://www.gomatlab.de/daten-import.....ehrere-zellen-t15675.html
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 10.12.2010, 02:24     Titel:
  Antworten mit Zitat      
Hallo

Zitat:

fscanf, fread und importdata hab ich schon probiert, aber ich bekomme nur eine leere Matrix als Antwort und weiß nicht, wo der Fehler liegt.

Das können wir natürlich auch nicht wissen, wenn du nicht den verwendeten Code postest. Tu das bitte das nächste Mal.

Zitat:

Die Hilfedateien und lange Internetsuche haben mich noch nicht zum Ziel geführt,


Wie wäre es denn mit der Forumsuche, da das Thema hier schon etliche Male besprochen wurde.

Aber natürlich möchte ich dich nicht mit solchen Aussagen hier im Regen stehen lassen (aber nimm dir bitte trotzdem die Tipps zu Herzen):
Code:

 [txtfile,path2txt] = uigetfile('*.txt','Bitte Datei auswählen');          
 fid = fopen(fullfile(path2txt,txtfile),'r');
 A =  textscan(fid,'%f%f%f%f','headerlines',8);  
 fclose(fid);
 MAT = cell2mat(A);
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
THMCA

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2010, 15:47     Titel: Problem gelöst!
  Antworten mit Zitat      
Vielen Dank für die Hilfe, es funktioniert alles nach Wunsch!

@Sco: hast natürlich Recht, Forumssuche wär noch eine Alternative gewesen! Werd's mir merken Wink
 
Giuseppe

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2011, 12:04     Titel:
  Antworten mit Zitat      
Hi, hab ein ähnliches Prob.
Meine Datei sieht so aus:

Code:
*01* Measurement Data File
*35* Pos Tracking Start: Date/Time [m/d/y, h:m:s]: 12/06/2010, 14:50:12, Using Grabber Time Stamp
*31* Point  x[  m]         y[  m]         z[  m]        status
 1    2.682533e-002  5.552101e-002  1.706942e-001 0
 2    1.588484e-001  5.554800e-002  1.696909e-001 3
 3    7.508421e-002  1.353162e-001  1.719162e-001 0
 4    1.927540e-001  1.343422e-001  1.698379e-001 3
 5    1.628762e-001  2.923376e-001  1.733074e-001 0
 6    1.831271e-001  2.916818e-001  1.747353e-001 0
 7    2.042622e-001  2.918193e-001  1.752343e-001 0
 8    2.253038e-001  2.914775e-001  1.751834e-001 0
 9    2.459610e-001  2.908028e-001  1.741603e-001 0
 10    2.659951e-001  2.906874e-001  1.721923e-001 3
 11    2.872001e-001  2.904293e-001  1.677278e-001 3
 12    2.430992e-001  4.282546e-001  1.758971e-001 0
 13    2.638246e-001  4.278768e-001  1.776707e-001 0
 14    2.843512e-001  4.277001e-001  1.781150e-001 0
 15    3.046297e-001  4.275439e-001  1.781496e-001 0
 16    3.251646e-001  4.275282e-001  1.766873e-001 0
 17    3.454679e-001  4.269170e-001  1.729314e-001 3
 18    2.855564e-001  4.955514e-001  1.777548e-001 0
 19    3.728141e-001  4.942516e-001  1.760826e-001 3
 20    3.194333e-001  5.535093e-001  1.790366e-001 0
 21    3.990786e-001  5.531613e-001  1.781877e-001 0
 22    3.398181e-001  5.842377e-001  1.799337e-001 0
 23    4.093763e-001  5.831516e-001  1.787309e-001 3
*38* WorstError  RingDelay  IOStatus  FrameIndex  TimeStamp  LostFrame
 3 0 0 0 0 0
*31* Point  x[  m]         y[  m]         z[  m]        status
 1    2.687695e-002  5.529389e-002  1.706646e-001 0
 2    1.584942e-001  5.468002e-002  1.690624e-001 0
 3    7.499564e-002  1.351821e-001  1.719174e-001 0
 4    1.925426e-001  1.356887e-001  1.703997e-001 0
 5    1.628450e-001  2.923966e-001  1.736380e-001 0
 6    1.830976e-001  2.919990e-001  1.751851e-001 0
 7    2.043295e-001  2.918314e-001  1.755455e-001 0
 8    2.252365e-001  2.912805e-001  1.753853e-001 0
 9    2.457809e-001  2.909182e-001  1.744883e-001 0
 10    2.659869e-001  2.901259e-001  1.722198e-001 0
 11    2.871959e-001  2.909080e-001  1.684921e-001 0
 12    2.429459e-001  4.284122e-001  1.764865e-001 0
 13    2.638178e-001  4.276499e-001  1.781088e-001 0
 14    2.843382e-001  4.277721e-001  1.786923e-001 0
 15    3.046280e-001  4.273088e-001  1.785222e-001 0
 16    3.250999e-001  4.276147e-001  1.773499e-001 0
 17    3.454098e-001  4.272869e-001  1.739664e-001 0
 18    2.855418e-001  4.955031e-001  1.783880e-001 0
 19    3.727311e-001  4.941730e-001  1.770015e-001 0
 20    3.194063e-001  5.534668e-001  1.798084e-001 0
 21    3.989833e-001  5.530996e-001  1.789654e-001 0
 22    3.397695e-001  5.841599e-001  1.807712e-001 0
 23    4.091174e-001  5.835565e-001  1.804779e-001 0
*38* WorstError  RingDelay  IOStatus  FrameIndex  TimeStamp  LostFrame
 0 0 0 1 20002 0


ich will aus dieser Datei nur die Zeilen mit den wissenschaftlichen Zeilen, also die, die zu Beginn die Zahlen 1 bis 23 haben.
Folgendes hab ich auch dazu geschrieben:

Code:
fid = fopen('o1k.dat');
datei = [];
while ~feof(fid)
    tline = fgetl(fid);
    a = strfind(tline,'*');
    b = strfind(tline,'e');
    format = '%d %f %f %f %d';
    if (isempty(a) == 1 && isempty(b) == 0)
        zeile = textscan(tline, format);
        datei = [datei;zeile];
        disp(zeile);
    end
end
fclose(fid);


Nun werden aber alle Zeilen als Matrizen in die neue Matrix "datei" geschrieben. Ist das ok, oder wird da mehr Speicher o.ä. verwendet?
Gibt es eine andere Möglichkeit, so dass man textscan über die komplette Datei laufen lässt? Hab ja nicht nur 3 Headerlines sondern zwischen durch noch welche...
Danke
 
Giuseppe

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2011, 12:25     Titel:
  Antworten mit Zitat      
Ok, muss das doch iwie anders lösen. Wenn ich mit dieser Lösung eine große Datei einlesen will dann braucht es ewig bis es eingelesen ist.... ich probier mal als Hedarelines einen Vektor bei Textscan anzugeben anstatt nur eine feste Zahl.
 
Surfer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2011, 14:34     Titel:
  Antworten mit Zitat      
Hallo!

Bevor ich einen neues Thema aufmache, schreib ich meine ähnline Frage mal mit hier hin:

Ich hab ein 'Problem' mit textscan:
Ich möchte eine .csv-Datei in Matlab einlesen und danach einige Berechnungen machen.

in etwa so:

Typ,a,b,c
dd,1,0.45,0.78
ss,0,0.35,0.99

Funktioniert mit dem Code wunderbar:
Code:
fid1=fopen(inputpath,'r');
input=textscan(fid1,'%s %d %.2f %.2f','headerlines',1,'delimiter',',');
fclose(fid1);


Problem an der Sache ist allerdings, dass die Werte an den STellen 3 und 4 zwei Nachkommastellen haben und MATLAB das als eine GANZE Zahl einliest. Ergebnis ist dann 0! Warum?
Die Ausgabe erfolgt dann ebenfalls als ganze Zahl was einen Fehler in meinem Fall bedeutet! Wie kann man das beheben?
LG
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.01.2011, 22:57     Titel:
  Antworten mit Zitat      
Hallo Surfer,

Soweit ich die Dolumentation von TEXTSCAN verstehe, würde ein einfaches "%f" die Zahlen exakt einlesen.
Mit "%.2f" werden dagegen zwei "Digits" eingelesen. Es scheint so, also würde das aber den Punkt mitzählen. Wenn ich aber dies versuche, funktioniert es wie erwartet:
Code:
input=textscan('dd,1,0.45,0.78', '%s %d %.2f %.2f',
       'delimiter',',');

Unter Matlab 2009a sehen die Ergebnisse korrekt aus. Und bei Dir?
Du könntest es ja mal ohne ".2" versuchen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Surfer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2011, 11:03     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für deine Antwort. Ich hatte gestern da auch noch ein bisschen rumprobiert und hab den Ursprung des Fehlers dann auch ein Stückchen weiter unten in meinem Programm gefunden.

Es liegt nicht an Textscan, sondern an Horzcat. Nach dem Textscan wollte ich alle Spalten in einer Matrix haben und habe das über

Code:
ERG=[a b c];


probiert. Da schneidets dann irgendwie die Nachkommastellen ab.
Rausgekommen bin ich da jetzt mit:

Zitat:
ERG=ones(length(Matrix),length(Matrix));
ERG(:,1)=a(:,:);
ERG(:,2)=b(:,:);
ERG(:,3)=c(:,:);


dann werden die Nachkommastellen korrekt angezeigt.
 
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.