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

Extrem kleine Zahlen aus Datei einlesen

 

CubaMAN

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2009, 02:32     Titel: Extrem kleine Zahlen aus Datei einlesen
  Antworten mit Zitat      
Hallo,

ich habe ein kleines Problem. Mir liegt eine Simulationsdatei vor, die wie folgt aussieht. Habe unten einen Ausschnitt angehängt. Die Datei besteht aus 132 Variablen zu 3 Zeitpunkten. Leider gibt mir das Simulationstool sobald etwas mit dem Exponent größer 99 ist nicht 10E-100 aus sonder 10-100 womit Matlab beim Laden nicht klar kommt. Wird verständlicherweise als 2 Zahlen interpretiert anstatt als eine. Dadurch verschieben sich die Werte in der Matrix nachher extrem. Wie könnte man es hinbekommen, dass das 10-100 als ein Wert gelesen wird und von mir aus auch als NaN oder ähnliches gespeichert wird? Mich würden prinzipiell nur die ersten 3 Variablen interessieren.

Anbei noch was ich bisher zusammengeschrieben habe. Komischerweise klappt der Import über File ... Import Data problemlos.

Das 10f müsste doch festlegen dass der Wert aus 10 Zeichen besteht oder liege ich da falsch?

Code:
fid = fopen('output.txt', 'r');
[FILEDATA,c] = fscanf(fid, '%1d0ff %10f %10f %1f0 %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f %10f',[132 inf]);
fclose(fid);


Schonmal vielen Dank.

Grüße
CubaMAN

output.txt
 Beschreibung:

Download
 Dateiname:  output.txt
 Dateigröße:  4.26 KB
 Heruntergeladen:  605 mal


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2009, 11:45     Titel: Re: Extrem kleine Zahlen aus Datei einlesen
  Antworten mit Zitat      
CubaMAN hat Folgendes geschrieben:
Hallo,

Anbei noch was ich bisher zusammengeschrieben habe. Komischerweise klappt der Import über File ... Import Data problemlos.

Schonmal vielen Dank.

Grüße
CubaMAN


So wie ich das sehe ist das aber auch falsch. Siehe den vorletzten Wert der letzten beiden Zeilen: -1.535-223 und -1.549-209, bei mir liest Matlab daraus -1,535 und -1,549, also nur die Mantisse.
Ich fürchte, die fehlendes E's muss man da noch irgendwie reinbasteln.
 
CubaMAN

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2009, 20:20     Titel:
  Antworten mit Zitat      
Das wäre nicht so tragisch, da mich diese Werte nicht interessieren.
Das wichtige wäre halt dass er 10.254-205 nur als 10.254 und nicht als 10.254 und -205 einliest.
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2009, 21:08     Titel:
  Antworten mit Zitat      
Hab überlesen, dass Dir die ersten 3 Spalten reichen würden.
Da kann man den Rest auch weglassen:
Code:
fid=fopen('output.txt','r');
A=textscan(fid,'%f %f %f %*[^\n]');
fclose(fid);

Das versagt aber auch, falls das 'E' mal in einer dieser Spalten fehlt...
 
CubaMAN

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2009, 21:28     Titel:
  Antworten mit Zitat      
Eine andere Idee, die ich hatte war die Datei komplett einzulesen, danach den Anfang der Daten zu suchen und ab da alles in eine temporäre Datei zu speichern. Diese wiederrum mit uimport zu laden.

Die Datei schaut komplett (mit Header, Variabeln und Datengewurstel) folgendermaßen aus. Siehe Anhang.

Nun stellt sich mir nur die Frage wie ich das einlese, so dass nichts verändert wird und findstr funktioniert. Habe schon mit textscan und fscanf probiert. Bei fscanf müsste die Formatierung bekannt sein. Diese ist allerdings erst ab den Variablen bestimmt vorgegeben. Textscan mit 3 headerlines liefert eine Matrix mit recht vielen NaN. Ich denke glaub etwas zu kompliziert Sad

out_ca.txt
 Beschreibung:

Download
 Dateiname:  out_ca.txt
 Dateigröße:  818.84 KB
 Heruntergeladen:  774 mal
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2009, 21:38     Titel:
  Antworten mit Zitat      
Ändert sich denn die Anzahl der Headerlines?
Dann würde ich
Code:
benutzen, um zeilenweise einzulesen, bis ein bestimmter tag kommst. Die Anzahl der eingelesenen Zeilen merkt man sich und nimmt die dann als Headerlines für
Code:
.

Sonst nimm halt
Code:
fid=fopen('out_ca.txt','r');
A=textscan(fid,'%f %f %f %*[^\n]','HeaderLines',3);
fclose(fid);

Auch wenn da Nullen angezeigt werden, die Daten sind richtig eingelesen.
Siehe dazu auch die vielen Beiträge im Forum, z.B. zu format long e.
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 10.02.2009, 22:21     Titel:
  Antworten mit Zitat      
File -> Import Data ist also in der Lage die Daten einzulesen. D.h. MATLAB ist grundsätzlich in der Lage das Format selbst zu interpretieren.

Aktuelle MATLABs haben im Fenster des Import Wizards (Das Tool das sich nach der Auswahl der zu importierenden Datei öffnet) eine Check-Box "Generate M-Code". Einfach mal ausprobieren.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2009, 22:35     Titel:
  Antworten mit Zitat      
Andreas Goser hat Folgendes geschrieben:
File -> Import Data ist also in der Lage die Daten einzulesen. D.h. MATLAB ist grundsätzlich in der Lage das Format selbst zu interpretieren.

Jein, denn wenn das 'E' fehlt interpretiert Matlab den Exponenten als neue Zahl. Das ist dann falsch und führt zu den o.g. Verschiebungen.

Code:
Aktuelle MATLABs haben im Fenster des Import Wizards (Das Tool das sich nach der Auswahl der zu importierenden Datei öffnet) eine Check-Box "Generate M-Code". Einfach mal ausprobieren.

Andreas


Das ist immer eine gute Idee, die Code-Generierung gibt es in den meisten Tools, wenn nicht in allen (z.B. imtool, cftool ...). Würde ich hier aber nicht machen, denn wozu etwas einlesen, von dem später das meiste unwichtig ist.

Am besten wäre es natürlich, in dem Simulationstool die Sache mit den Exponenten zu korrigieren, das grenzt ja an Unbenutzbarkeit. Andererseits, sind solche Zahlen den noch zu gebrauchen?
 
CubaMAN

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2009, 00:06     Titel:
  Antworten mit Zitat      
Anonymous hat Folgendes geschrieben:


Am besten wäre es natürlich, in dem Simulationstool die Sache mit den Exponenten zu korrigieren, das grenzt ja an Unbenutzbarkeit. Andererseits, sind solche Zahlen den noch zu gebrauchen?


Eine Korrektur im Simulationstool kann man vergessen weil es eine "strenge Formatierung" hat. 10 Ziffern pro Wert. Also Vorzeichen + die Zahl. Soweit ich weiß in Fortran geschrieben mit dem ich mich persönlich null auskenne. Vorschlagen werde ich es jedenfalls mal bzw. darauf hinweisen. Die Zahlen kann man eigentlich als 0 ansehen. Sie haben nur durch die numerische Integration einen Wert ungleich 0.

Vielen Dank an alle. Werd das was du oben geschrieben hast jetzt ausprobieren.
 
CubaMAN

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2009, 01:38     Titel:
  Antworten mit Zitat      
Nochmals vielen Dank. Hat wunderbar geklappt. Man muss nur wissen wie. Kann ich morgen gleich weiter dran schaffen Smile
 
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.