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

Zeilencektor byteweise speichern

 

Liddokun

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2010, 18:39     Titel: Zeilencektor byteweise speichern
  Antworten mit Zitat      
hallo,

habe da ein Problem mit dem abspeichern einer Datei. Es handelt sich hierbei um einen Zeilenvektor mit etwa 100000 elementen. Dieser Vektor soll gespeichert werden, und zwar so, das jede Zahl ein byte groß ist. Hierbei handelt sich um 8bit Zahlen.

Folgenden Algorithmuss nehme ich bisher.:

Code:


save Test.abc Daten -mat;
fd = fopen('Test.abc', 'w');                
fwrite(fd, 1:end, 'integer*1');  
fclose(fd);                                    

 


es kommt auch eine Datei heraus welche genau soviele Bytes groß ist, wie sie Zahlen enthält, jedoch kann ein anderes programm welches genau ein solches Zahlenbad brauch, es nicht einlesen.

Hat einer eine Idee wo der Fehler liegt ?


Linus
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 30.08.10
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 17.09.2010, 19:07     Titel:
  Antworten mit Zitat      
Dein Schritt mit dem save vorher macht gar keinen Sinn. Du speicherst die Dateim MATLAB-Format ab, und schreibst hinterher da drüber / da rein. Außerdem schreibst du nur "1:end", was zum Absturz führen dürfte, bzw nichts macht oder so?


Du willst wahrscheinlich:

Code:

fileName = 'Test.abc';

% wir löschen die Datei, falls sie schon existiert...
if exist(fikeName, 'file')
    delete fileName
end%if

% datei öffnen & schreiben
fd = fopen(fileName, 'w');                
    fwrite(fd, uint8(Daten(:)), 'uint8');  
fclose(fd);                                    
 


Beachte, wie wir die Daten erst nach uint8 konvertieren, und sie dann auch als uint8 schreiben, um ganz sicher zu gehen!

Code:
ist übrigens das gleiche wie Daten(1:end). Wahrscheinlich sollte auch
Code:

    fwrite(fd, uint8(Daten), 'uint8');  
 

funktionieren.
_________________

RWTH - Mindstorms NXT Toolbox - free & open source
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.09.2010, 19:11     Titel: Re: Zeilencektor byteweise speichern
  Antworten mit Zitat      
Hallo Liddokun,

Zitat:
Code:

save Test.abc Daten -mat;
fd = fopen('Test.abc', 'w');                
fwrite(fd, 1:end, 'integer*1');  
fclose(fd);
 

Du speicherst zuerst die Variable "Daten" im Matlab-Format ab, also als MAT-File.
Dann öffnest Du diese Datei und überschreibst die Werte --- wozu sie dann erst als MAT speichern???
Der Befehl "fwrite(fd, 1:end, 'integer*1')" schreib den Vektor "1:end" in das File. Das sollte eigentlich mit einem Fehler stoppen, weil sich "end" auf gar nichts bezieht! "fopen(FileName 'w')" hat Dein File aber bereits abgeschnitten, so dass es die Länge 0 haben sollte.

Das gezeigte Programm passt also nicht zu Deinen Erklärungen, was nicht hilfreich ist.

Versuche es mal so:
Code:

Data = rand(1, 1e6) * 255;
FID = fopen('Test.abc', 'w');
fwrite(FID, Data, 'uint8');
fclose(FID);
 


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2010, 19:47     Titel:
  Antworten mit Zitat      
fragt mich nicht was mich geritten hat vorher das mit dem save zu machen, Embarassed

ich werde beide Varianten mal testen und berichten ob es funktioniert
 
Liddokun

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2010, 20:26     Titel:
  Antworten mit Zitat      
ok funktioniert alles super.

wie gesagt, fragt mich nicht was mich geritten hat da mit save anzufangen, kommt wahrscheinlich davon wenn man zu lange über was grübelt Rolling Eyes


viellen Dank nochmal Very Happy
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.09.2010, 21:19     Titel:
  Antworten mit Zitat      
Hallo Liddokun,

was hat Dich eigentlich geritten mit SAVE anzufangen?

Schön, dass das Forum hilfreich sein konnte.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2010, 18:54     Titel:
  Antworten mit Zitat      
um ehrlich zu sein ist mir erstmal klar geworden was für ein Mist das ist, wo ihr mir das gesagt habt. Habe mir wohl eingeredet, das man erst eine Datei erschaffen muss, um in diese etwas zu schreiben, aber das mache ich ja imprinzip mit fd=fopen( ....); . Klarer Fall von totaler benebelung Rolling Eyes

aber nochmals vielen Dank für die Hilfe Very Happy
 
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.