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

Daten aus ascii-Datei einlesen

 

akaia

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2010, 12:16     Titel: Daten aus ascii-Datei einlesen
  Antworten mit Zitat      
Hallo!

Ich sitze schon eine Weile an einer Aufgabe und komme leider nicht weiter. Habe schon einige Ansätze ausprobiert und bin kläglich gescheitert. Könnte mir jemand helfen beim Einlesen von Daten aus einer ascii-Datei (*.lvm)?

Die Daten liegen spaltenweise vor -> 2 Spalten und ca. 50 Zeilen. Das Ganze sieht dann folgendermaßen aus:

133,786102 104,205933
128,177246 105,952820
132,886261 108,058777
130,261780 112,193787
126,739075 114,010071
129,174988 117,624939
127,583984 120,568695
122,966888 122,884094
120,276947 126,719055
124,296570 130,166290
125,505127 131,988647

Problematisch ist der Aufbau, weil erst ein Tab vorliegt, dann die Werte mit Komma, anstatt eines Punktes vorliegen.

Ich habe schon einiges ausprobiert. Load funktioniert nicht, weil die Komma ausgelassen werden und die Null nach dem Komma fehlt. fread etc. liefert mir auch kein zufriedenstellendes Ergebnis.

An dieser Stelle hoffe ich auf eure Hilfe. Die Spalten sollen nach dem Einlesen als Vektoren gespeichert werden, um mit den Werten weiterarbeiten zu können.

Grüße und besten Dank im Voraus Smile


aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 08.02.2010, 13:01     Titel:
  Antworten mit Zitat      
Hi,

probier mal folgendes:

Code:

fid=fopen(datei,'rb');   % datei ist ein String mit dem vollständigen Dateinamen
a=fread(fid,'uint8');
fclose(fid);
a(a==44)=46 .*ones(size(a(a==44))); % Komma wird mit Dezimalpkt. ersetzt.
fid=fopen(datei,'wb');
fwrite(fid,a,'uint8');
fclose(fid);
load(datei);  % Jetzt müsste das Laden der Datei funktionieren.
 


Grüße[/code]
_________________

Andreas Geißler
Private Nachricht senden Benutzer-Profile anzeigen
 
akaia

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2010, 13:49     Titel:
  Antworten mit Zitat      
Es funktioniert! Smile

Die Komma werden durch einen Punkt ersetzt und ich kann die Daten nachdem sie erneut geladen wurden, auslesen und weiterverarbeiten. Herzlichen Dank!

Muss auch sagen, dass dies bislang die schnellste sowie einfachste Variante ist! Super! Wink
 
gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2010, 18:19     Titel: frage über deine lösung
  Antworten mit Zitat      
Hallo,

ich hätte gern eine frage zu deiner lösung ,gilt dese lösung nur für deine daten oder ist das allgemein?
ich habe auch daten mit komma und ich will sie direkt einlesen und automatisch durch punkt ersetzen ,ich habe dein code benutzt ,und es hat funktioniert.
ich habe messdaten von 200000 werte mit 8 stellen nach dem komma.
könnte man mit dem code 200000 werte einlesen und automatisch durch punkt ersetzen?
vielen dank
 
aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 08.02.2010, 18:41     Titel:
  Antworten mit Zitat      
Hi,

das müsste auch mit Deiner Datei funktionieren. Die Größe liegt wahrscheinlich so zwischen 300 und 600 kByte ?
Nach dem Einlesen Dieser Datei mit 200.000 Messwerten á ca. 20 Zeichen (+,-,. + Ziffern) hast Du einen Vektor mit 4 Mio. Werten, was einer Matrix von 2000 x 2000 entspricht.

Bei genügend Arbeitsspeicher sollte dies kein Problem sein.

Mann kann das binäre Einlesen (und Wegschreiben) stückeln, so daß z.B. erst nur die Hälfte der Datei eingelesen, die Komma in Punkt konvertiert und dann weggeschrieben werden.

Einfach mal probieren ...

Grüße
_________________

Andreas Geißler
Private Nachricht senden Benutzer-Profile anzeigen
 
gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2010, 19:37     Titel: frage zu deiner lösung
  Antworten mit Zitat      
Hallo,

die Grösse der Datei ist 2439KB und jedes datei hat 200000 werte die eingelesen werden müssen ,ich darf dieses datei nicht in 2 hälften teilen und einlesen,es ist eine messung komplett.
ich könnte das einlesen,aber ich weiss nur nicht ob nach dem einlesen die daten so bleiben wie sie sind.
wie kann ich das überprüfen bei diese dateigrösse?
oder bleibt nach dem ersetzen durch punkt so?
grüssse
 
aj.geissler
Forum-Guru

Forum-Guru



Beiträge: 251
Anmeldedatum: 26.11.07
Wohnort: Seeheim-Jugenheim
Version: ---
     Beitrag Verfasst am: 08.02.2010, 19:54     Titel:
  Antworten mit Zitat      
Hi,

Du kannst die Daten auch in eine neue Datei schreiben, so daß die Originaldaten nicht verloren gehen!

Der Kniff bei der Lösung hier war ja nur, daß eine Textdatei erstellt wurde, die sehr schnell mit "load" zu laden war.

Bei spezielleren Problemen wird man aber nicht umhin kommen, die Daten "Stück für Stück" einzulesen (auch binär) und die Matlab-Daten peaux á peaux zu einer Gesamtmatrix zusammenzupacken.

Grüße
_________________

Andreas Geißler
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.