Store a Vector as csv-File in a Mex File

1 view (last 30 days)
Hi guys,
I have a small Problem with storing a Vector as CSV-File using a mex function. I my goal is an nice and tidy implementation. For that reason I tried the following code:
mdlStart
FILE *PtrTextID = ssGetPWork(S,3);
PtrTextID = fopen("Storage.txt", "w");
mdlUpdate
FILE *PtrTextID = ssGetPWork(S,3);
fprintf(PtrTextID, "Test");
mdlTerminate
FILE *PtrTextID = ssGetPWork(S,3);
fclose(PtrTextID);
This code leads to a Matlab crash. But if I'm using
mdlUpdate
FILE *PtrTextID
PtrTextID = fopen("Storage.txt", "w");
fprintf(PtrTextID, "Test");
fclose(PtrTextID);
the code works pretty well and do the thinks it's used to. Thats why my guess is that ssGetPWork is not the right workspace to store an FILE-Structure. But what is the right Workspace?
Thanks for your help, CN CN

Accepted Answer

Kaustubha Govind
Kaustubha Govind on 22 Aug 2012
ssGetPWork takes only one input argument, and returns a void**. Also you need to initialize the number of PWorks first. I haven't tested this out, but I think your code should look like:
mdlInitializeSizes
ssSetNumPWork(S, 1);
mdlStart
ssGetPWork(S)[0] = (void *)fopen("Storage.txt", "w");
mdlUpdate
FILE *PtrTextID = (FILE *)(ssGetPWork(S)[0]);
fprintf(PtrTextID, "Test");
mdlTerminate
FILE *PtrTextID = (FILE *)(ssGetPWork(S)[0]);
fclose(PtrTextID);
Note: ssGetPWork(S)[0] can be replaced with ssGetPWorkValue(S, 0)
  1 Comment
Christoph
Christoph on 23 Aug 2012
Hi Kaustubha,
tanks for your excellent help. Your code just works perfect. As you mananged in your note I mixed up getting Values from the DWorkSpace and the PWorkSpace.
kind regards, CN

Sign in to comment.

More Answers (0)

Categories

Find more on Simulink in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!