Code and decode an entire struct to and from a plain string

Hi,
I need to convert an arbitrary struct to a plain string. I’m going to pass the sting as one single argument to a standalone executable (the exe also built and compiled with MATLAB). Within the exe I’m going to decode the string and rebuild an identical copy of the original stuct. Hence, the string needs to contain all metadata about the struct.
Also: The struct to be passed to the exe is not going to be static. Each time it may contain different fields, cell arrays, etc. But the struct is only going to contain numerical values and strings.
Has anyone done this before and could share the code or give some advice?
Also wondering if there is any limitation on amount and/or size of arguments that could be sent as argument to an exe on the Windows platform?
Should mention that I’m rather new to MATLAB.
// Lars

5 comentarios

dpb
dpb el 5 de Oct. de 2013
Editada: dpb el 5 de Oct. de 2013
Yeech... :)
Use save and load instead...
ADDENDUM:
Unless later versions have modified it (and I'd be really surprised given that command processor is being phased out as much as can be by MS) the line limit is 1023 on MS shells. The enhanced command shell from JPSoft will internally accept multi-line command lines that can expand alisases and/or environment variables up to a total limit of 2X that but for that to happen it has to be two actual commands submitted on the one line w/ the line separator character embedded...
Agree upon yeech, but save and load is not a good option in this case (suppose you mean save to file/loade from file).
If I get you right; 1023 characters is the limit.
// Lars
Image Analyst
Image Analyst el 5 de Oct. de 2013
Editada: Image Analyst el 5 de Oct. de 2013
Why is the much, much simpler option of using a mat file to transfer your variable not an option? Why is the much more complicated and difficult way of doing it the way you (a self-described MATLAB beginner) thought up the only option worth considering?
The exe is going to be installed on a server. It’s going to be run several thousand times a day. It may run simultaneously. It may be called automatically from other apps. It might be called from GUI on workstations. It’s performance critical.
Personally (not being an expert) I think it might get a bit messy (and unnecessary) with all files.
On top of that, the IT department does not want a solution that requires intermediate files to be stored.
So well . . . sending the data as argument through the shell is the best idea I could come up with.
// Lars
dpb
dpb el 5 de Oct. de 2013
The performance of binary mat-file transfer will far outpace ascii string transfer of a serialized structure (orders of magnitude difference).

Iniciar sesión para comentar.

 Respuesta aceptada

Cedric
Cedric el 5 de Oct. de 2013
Editada: Cedric el 5 de Oct. de 2013
What you are looking for is "MATLAB struct or object serialization" (on e.g. FEX or Google), but passing a serialized struct as a shell command arg is not robust at all, as mentioned in the comments. Serialization usually generates a significant amount of extra codes/characters, so you'll hit the shell command line limit in no time. Also, it is very likely that you'll have to re-encode strings outputted by the serialization to make them compatible with shell conventions (e.g. for white spaces, quotes, double-quotes).
If you really don't want to build a client-server framework (e.g. if you want to use a CGI-like type of mechanism), and your IT folks don't want too much disk access load, why not storing temporary MAT files on a RAM-drive (using e.g. ImDisk) or equivalent on the system which will host your application?

Más respuestas (1)

Image Analyst
Image Analyst el 5 de Oct. de 2013
You can pass variables directly in via the argument list if you make the program a server instead of a standalone executable, but I don't know the details, so call the Mathworks and they can tell you.

Categorías

Más información sobre Data Type Conversion en Centro de ayuda y File Exchange.

Preguntada:

el 5 de Oct. de 2013

Editada:

el 5 de Oct. de 2013

Community Treasure Hunt

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

Start Hunting!

Translated by