|
|
Extrem kleine Zahlen aus Datei einlesen |
|
CubaMAN |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.02.2009, 02:32
Titel: Extrem kleine Zahlen aus Datei einlesen
|
 |
|
 |
|
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?
Schonmal vielen Dank.
Grüße
CubaMAN
Beschreibung: |
|
 Download |
Dateiname: |
output.txt |
Dateigröße: |
4.26 KB |
Heruntergeladen: |
648 mal |
|
|
|
|
|
Gast |
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.02.2009, 11:45
Titel: Re: Extrem kleine Zahlen aus Datei einlesen
|
 |
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: ---
|
 |
|
|
 |
|
Verfasst am: 10.02.2009, 20:20
Titel:
|
 |
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: ---
|
 |
|
|
 |
|
Verfasst am: 10.02.2009, 21:08
Titel:
|
 |
Hab überlesen, dass Dir die ersten 3 Spalten reichen würden.
Da kann man den Rest auch weglassen:
Das versagt aber auch, falls das 'E' mal in einer dieser Spalten fehlt...
|
|
|
CubaMAN |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.02.2009, 21:28
Titel:
|
 |
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
Beschreibung: |
|
 Download |
Dateiname: |
out_ca.txt |
Dateigröße: |
818.84 KB |
Heruntergeladen: |
815 mal |
|
|
|
Gast |
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.02.2009, 21:38
Titel:
|
 |
Ändert sich denn die Anzahl der Headerlines?
Dann würde ich
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
.
Sonst nimm halt
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
|
 |
Beiträge: 3.654
|
 |
|
 |
Anmeldedatum: 04.12.08
|
 |
|
 |
Wohnort: Ismaning
|
 |
|
 |
Version: 1.0
|
 |
|
|
 |
|
Verfasst am: 10.02.2009, 22:21
Titel:
|
 |
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
|
|
|
Gast |
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.02.2009, 22:35
Titel:
|
 |
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.
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: ---
|
 |
|
|
 |
|
Verfasst am: 11.02.2009, 00:06
Titel:
|
 |
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: ---
|
 |
|
|
 |
|
Verfasst am: 11.02.2009, 01:38
Titel:
|
 |
Nochmals vielen Dank. Hat wunderbar geklappt. Man muss nur wissen wie. Kann ich morgen gleich weiter dran schaffen
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|