> Gibt es eine Möglichkeit, dies zu beschleunigen?
Ja, mit einem MathLink-Programm. Üblicherweise lassen sich binär
geschriebene Fortran-Daten auch von einem C-Programm prima lesen,
damit erspart man sich Mixed-Language Programmierung.
Unten angehängt als Beispiel eine Abwandlung von einem Code, den
ich mir mal zu so einem Zweck geschrieben habe. Kompilieren mit
mcc, in Mma mit Install["ReadData"] laden.
Gruß,
Thomas Hahn
---------------------------snip------------------------------
:Begin:
:Function: readdata
:Pattern: ReadData[filename_String]
:Arguments: {filename}
:ArgumentTypes: {String}
:ReturnType: Manual
:End:
:Evaluate: ReadData::noopen = "Cannot open `1`."
void readdata(const char *filename)
{
FILE *file;
double row[100];
int ndata, i;
file = fopen(filename, "r");
if(file == NULL) {
MLPutFunction(stdlink, "CompoundExpression", 2);
MLPutFunction(stdlink, "Message", 2);
MLPutFunction(stdlink, "MessageName", 2);
MLPutSymbol(stdlink, "ReadData");
MLPutString(stdlink, "noopen");
MLPutString(stdlink, filename);
MLPutSymbol(stdlink, "$Failed");
return;
}
MLPutFunction(stdlink, "Flatten", 1);
while(!feof(file)) {
... hier die Daten eines Records ins Array row einlesen ...
ndata = (Anzahl der Daten in row);
MLPutFunction(stdlink, "List", 2);
MLPutFunction(stdlink, "Data", ndata);
for(i = 0; i < ndata; ++i) MLPutDouble(stdlink, row[i]);
}
MLPutFunction(stdlink, "List", 0);
MLEndPacket(stdlink);
}
main(int argc, char **argv)
{
return MLMain(argc, argv);
}