Problem mit MATFiles-Einbindung

chebsam

Grünschnabel
Hallo,

möchte mehrere Dateien aus Matlab in C bearbeiten. Hab dazu folgendes erreicht:

Code:
int main() 
{
  int status;//für später
  //Test double data[9] = { 1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0 };
  char *file_a;
  mxArray **vektor;
  MATFile *filehandle;//A handle to a MAT-file object.

//****************************************************************************************************
//*****************************DATEIEN AUS MAT-FILES ERZEUGEN*****************************************
//****************************************************************************************************  
  for (int a=1; a<=576; a++)
  {
      MATFile *vektor_a_test;//in dieser Variable wird die mat-Datei gespeichert
      sprintf(file_a, "vektor_%i.mat", a);//Formatierung
      //file_a = "vektor_a.mat";//Deklaration der zu öffnenden Datei
      printf("Dateigenerierung %s...\n\n", file_a);
      filehandle = matOpen(file_a, "r");//pmat=vektor_a_test; Datenablage
      
      FEHLER: *vektor[a] =  matGetVariable(filehandle, "LocalDouble");   
      
      /*if (vektor_1_test == NULL) 
      {
      printf("Fehler %s\n", file);
      printf("(Do you have write permission in this directory?)\n");
      return(EXIT_FAILURE);
      }*/
  
  }//a-for-Schleife

Bekomme folgende Fehlermeldung in der Zeile, vor der FEHLER steht:
invalid use of undefined type `struct mxArray_tag'

Hat jemand ne Lösung?
 
Hi.

Hast du evtl. vergessen irgendwelche Header Dateien einzubinden?

Dann hast du eigentlich für keine deiner Zeigervariablen Speicher reserviert oder initialisiert. Z.B. für die Variable file_a mußt du erstmal Speicher bereitstellen, bevor du mit sprintf irgendetwas hineinschreibst. Diese Variable könntest du eigentlich einfach als char file_a[20]; definieren.

Gruß
 
Hi,
Header sind soweit alle eingebunden. Hab jetzt einfach oben anstelle von mxArray **vektor -> mxArray *vektor[1000] geschrieben und unten anstelle von *vektor[a] = matGetVariable(filehandle, "LocalDouble") -> vektor[a] = matGetVariable(filehandle, "LocalDouble") hingeschrieben und es wird problemlos kompiliert.

Die andere Frage ist, ob ich jetzt nicht was total anderes mache? Sobald ich das Sternchen unten wieder hinschreibe, erhalte ich diesselbe Fehlermeldung...

Mein Ziel ist es, Vektoren aus Matlab in C zu bearbeiten. Die wollte ich erstmal als "C-Dateien" speichern!?

Grüße
 
Hi.
Hi,
Header sind soweit alle eingebunden. Hab jetzt einfach oben anstelle von mxArray **vektor -> mxArray *vektor[1000] geschrieben und unten anstelle von *vektor[a] = matGetVariable(filehandle, "LocalDouble") -> vektor[a] = matGetVariable(filehandle, "LocalDouble") hingeschrieben und es wird problemlos kompiliert.

Die andere Frage ist, ob ich jetzt nicht was total anderes mache? Sobald ich das Sternchen unten wieder hinschreibe, erhalte ich diesselbe Fehlermeldung...
Wozu soll denn das Sternchen auch gut sein? Das Array enthält 1000 Objekte vom Typ mxArray* (also Zeiger auf mxArray) - die Funktion matGetVariable(..) liefert laut Dokumentation ein mxArray* zurück. Das passt also.
Mein Ziel ist es, Vektoren aus Matlab in C zu bearbeiten. Die wollte ich erstmal als "C-Dateien" speichern!?
Was meinst du mit C-Dateien? Wozu willst du die Daten in ein anderes Format bringen? Was versprichst du dir davon?

Gruß
 
Hallo,

ich muss Vektoren sortieren und die dazu notwendigen Speicher- und Ladebefehle werden in C schneller umgesetzt. Also aus Zeitgründen!

Das mit den Sternchen klingt logisch. Hab mir auch nochmal die Dokumentation online angeguckt. Stimmt so...vielen Dank!
 
Ich muss auf jeden einzelnen Vektor zugreifen können. Aber irgendwie verstehe ich deine Frage nicht. Ich öffne erst die Matlabdateien und will sie dann quasi einzeln neusortieren. Dazu muss ich sie doch erst abspeichern!?
Ich hoffe, dass wir nicht aneinander vorbeireden..
 
Zurück