c++ probleme mit matlab datei
-
Hallo,
ich habe ein Probelm bei dem ich leider nicht weiter komme, und zwar möchte ich eine Binär Datei folgendermaßen mit Matlab speichern:
fp=fopen('in.dat','w');
fwrite(fp,in ,'double');
fclose(fp);wobei "in" eine eine 5x262144 matrix ist.
Dann möchte ich diese Datei mit einem c++ programm folgendermaßen auslesen und ausgeben:double buffer[5];
while(fread(&buffer, sizeof(double), 5, fp1)>0){
k_x=buffer[0];
k_y=buffer[1];
s_r=buffer[2];
s_i=buffer[3];
deltaf=buffer[4];
printf("%le %le %le %le %le\n", k_x,k_y,s_r,s_i,deltaf);
}
doch leider krieg ich nicht alle 262144 zeilen sondern nur die ersten 11 und dann bricht die Schleife ab. Was läuft da wohl schief?
Wäre echt toll wenn mir da jemand weiterhelfen könnte.Liebe Grüße Christine
-
bist du sicher, das alle 262144 zeilen in der datei drin stehen?
das hierfp=fopen('in.dat','w'); fwrite(fp,in ,'double'); fclose(fp);
soll wohl pseudocode sein, das würde gar nicht erst kompilieren.
vermutlich ist ein fehler in deinem 'richtigen' code zum speichern.btw.
fread( buffer, sizeof(double), 5, fp1) ^
hier kein adressoperator nötig.
-
hallo,
nein nein, das ist kein pseudocode sondern matlabcode. ich bin mir auch sicher, dass alles drin steht, weil wenn ich die datei dann wiederrum mit matlab öffne bekomme ich wieder alle daten.
liebe grüße christine
-
achso, ok sorry, ich kenne den matlab code nicht.
man kann also c code und matlab code mixen?
ansonsten:
sind vielleicht noch irgendwelche anderen zeichen in der datei?
kannst du die datei irgendwo hochladen?
du könntest auch mal den error code abfragen: puts(strerror(errno));
-
Naja, ich verwende halt einmal das Programm Matlab und speichere damit die Datei dann will ich sie mit meinem C-Programm wieder öffnen. Das mit dem Error abfragen versteh ich nicht so ganz, weil mein Programm läuft ja ohne Fehlermeldung nur das Ergebniss das es produziert ist nicht das gewünschte.
Gruß Christine
-
Dein Programm läuft vermutlich deshalb ohne Fehlermeldung durch, weil du gar keine Fehlerausgabe implementiert hast, kann das sein?
Bei einem fread Lesefehler würde dann die while Schleife sang- und klanglos verlassen werden.
Dagegen die Zeile puts(strerror(errno)); würde dir bei einem Fehler die zugehörige Meldung in der Konsole anzeigen.
-
okay dann probier ich das einfach mal.
-
Leider wars das nicht, es kommt dann die ausgabe No error.
-
Poste doch mal ein minimales aber komplettes Programm das dein Problem provoziert.
Ansonsten weiss ich nicht was du überhaupt mit dem C++-Teil erreichen willst, aber eventuell wäre es interessant das als sog. MEX zu implementieren, das könntest du direkt aus Matlab aufrufen, ohne Umweg über eine Datei.
-
ich brauche c++, weil ich mit jeder zahl in der matrix (die ja doch ziemlich groß ist) eine berechnung durchführen muss, und wenn ich das mit matlab machen müsste würde das viel zu lange dauern.
ich hab n bisschen mit den daten rumprobiert und festgestellt, dass es doch tatsächlich darauf ankommt was in der matrix "in" steht, stehn z.B. lauter einsen drin läuft alles wunderbar und das c++ programm liest alle daten korrekt ein, bei anderen zahlen klappts dann manchmal nicht. das finde ich wirklich sehr komisch, deshalb denke ich, dass der fehler irgendwo bei matlab liegt. deshalb wäre das mit den mex files wahrscheinlich das beste. Wie krieg ich dass dann aber ohne datei hin? Also ich hab ja dann praktisch 2 exe dateien einmal das c++ programm und einmal das matlab, und wie können die dann daten austauschen ohne datei?
-
Mal die Hilfe lesen, dann wird es hoffentlich klarer: http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/matlab_external/bp_kqh7.html&http://www.google.de/search?q=matlab+external+interfaces&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla
official&client=firefox-a&safe=images
-
das Programm stürzt ab weil du in speicher schreibst, der vorher nicht allokiert wurde. Du schreibst also wild in den Speicher.
-
Ach sorry hab mich verlesen..
stimmt natürlich was du schreibst..
allerdings, warum steht in der while-Schleife "fp1" und oben definiert du "fp"