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

werte aus datei lesen

 

mathi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2012, 11:08     Titel: werte aus datei lesen
  Antworten mit Zitat      
hallo,

ich habe eine ziemlich große datei, aus der ich werte auslese. ich mache das mit folgender schleife

Code:

while (size(findstr('CELLS',currentString))==0)
        currentArray = strread(currentString,'%f','whitespace','n');  
        newOffset = offset + size(currentArray,1);
        points(offset:newOffset-1) = currentArray;
        offset = newOffset;
        currentString = fgetl(fid);    
end
 


das funktioniert auch. mein problem besteht nun darin, dass die werte in der datei bis zu acht nachkommastellen haben. aber irgendwie bekomme ich greundete werte.
kann ich denn die werte nicht exakt so auslesen und dann weiter verwenden?

gruß mati


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.05.2012, 11:28     Titel:
  Antworten mit Zitat      
Hallo,

meine Vermutung ist, dass die Werte nur gerundet angezeigt werden, aber mit voller Genauigkeit vorliegen.
Versuchs mal mit

Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mathi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2012, 17:15     Titel:
  Antworten mit Zitat      
danke, das werde ich machen.

ich schreibe die werte der datei teilweise in eine neue datei. daher ist mir aufgefallen, dass es gerundete werte sind...
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.05.2012, 20:31     Titel:
  Antworten mit Zitat      
Hallo,

in welchem Format schreibst du sie denn in die neue Datei?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mathi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2012, 08:20     Titel:
  Antworten mit Zitat      
hallo harald,

ich bin mir nicht ganz sicher, was du meinst...
also ich öffne meine datei in der die werte stehen:

Code:
fid = fopen(inputFilename,'r','b');


zum ende der funktion schreibe ich die werte wieder in eine matrix mit

Code:
points = reshape(points, 3, pointNumber);


und

Code:
points = points';


habe ich deine frage richtig beantwortet?
 
mathi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2012, 09:27     Titel:
  Antworten mit Zitat      
hi,

ich hab mir das noch mal genauer angeschaut... also, du hast recht harald. die werte liegen in voller genauigkeit vor. aber wenn ich sie dann in die neue datei schreibe, dann werden sie gerundet geschrieben. mit format long habe ich es schon versucht. das hilft leider nicht...

kann mir jemand einen tipp geben?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.05.2012, 09:28     Titel:
  Antworten mit Zitat      
Hallo,

irgendwo muss es ja einen fprintf-Befehl oder ähnliches geben, wo tatsächlich in die Datei geschrieben wird. Wenn du dort als Specifier %f angibst, wird wohl in einem Standardformat in die Datei geschrieben. Wenn du mehr Stellen möchtest, musst du das angeben:

Zur Veranschaulichung:
Code:
fid = fopen('testbla.txt', 'w');
fprintf(fid, '%f \n', 1.234567890123456);
fprintf(fid, '%.12f \n', 1.234567890123456);
fclose(fid);

type testbla.txt


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mathi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2012, 10:03     Titel:
  Antworten mit Zitat      
ja, den fprint befehl gibt es. aber irgendwie bekomme ich es einfach nicht hin... mein befehl sieht fogendermaßen aus:

Code:

for i=1:nPoints1
    fprintf(fid, ['  ' num2str(i) ', ' num2str(coords1(i,1)) ', ' num2str(coords1(i,2)) ', ' num2str(coords1(i,3)) '\n']);
end
 


wenn ich
Code:
direkt nach fid "einbaue", dann bekomme ich keine matrix mehr und auch keine werte. und wenn ich es innerhalb der [] schreibe, dann fehlen die werte komplett...

was mach ich denn falsch??? ich bin schon nahezu am verzwiefeln.... Question
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.05.2012, 10:15     Titel:
  Antworten mit Zitat      
Hallo,

auch bei num2str kann man das Format angeben, siehe Doku von num2str.

Deine Art der Verwendung des FPRINTF-Befehls ist so eher unüblich. Normalerweise verwendet man eben Specifier wie '%f' oder genauere Angaben des Formats und gibt danach an, welche Daten geschrieben werden sollen, siehe Beispiele in der Doku von fprintf.

Eine for-Schleife ist hier in der Regel unnötig, da fprintf das automatisch macht.

Beispiel:
Code:
fprintf(fid, '%4.0f , %12.8f , %12.8f , %12.8f \n', 1:nPoints1, coords(:,1), coords(:,2), coords(:,3));


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mathi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2012, 10:47     Titel:
  Antworten mit Zitat      
hallo!

super, vielen vielen dank!!!!

jetzt funktioniert es endlich! danke! Laughing

gruß mathi
 
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.