save does not recognize text scalar

29 vues (au cours des 30 derniers jours)
Richard
Richard le 24 Juil 2025
Commenté : Walter Roberson le 25 Juil 2025
The following code snippet fails unexpectedly:
clear;
myFilename = 'SavedData';
mustBeTextScalar(myFilename); % Throws exception if not true.
x = 3;
save(myFilename, x);
The variable myFilename passes the mustBeTextScalar as expected. However, the save command fails with the message
Error using save
Argument must be a text scalar.
Error in
saveTest (line 5)
save(myFilename, x);
^^^^^^^^^^^^^^^^^^^
QUESTION: Why does save not see myFilename as a text scalar, even though mustBeTextScalar passes it?
[MATLAB Version: 25.1.0.2943329 (R2025a)]

Réponse acceptée

Fangjun Jiang
Fangjun Jiang le 24 Juil 2025
Modifié(e) : Fangjun Jiang le 24 Juil 2025
It is not about the variable name myFilename.
save(myFilename)
or
save(myFilename,'x')
  4 commentaires
Stephen23
Stephen23 le 25 Juil 2025
"...But in doing so it would have lost the name of the numeric scalar and would only have its value. This is why save() needs text vectors containing the names of variables to be saved, instead of needing the content of those variables."
Yet TABLE manages to do this, so it turns out that functions do not "need" text inputs like this.
Walter Roberson
Walter Roberson le 25 Juil 2025
Well, table() uses inputname under the hood, and invents variable names for cases where expressions were passed. save() does not have the luxary of being able to invent variable names.
x = [1;2;3];
table(x, [4;5;6], +x)
ans = 3×3 table
x Var2 Var3 _ ____ ____ 1 4 1 2 5 2 3 6 3
... variable names are used where inputname() is able to figure them out, and otherwise variable names are invented for expressions.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Characters and Strings dans Help Center et File Exchange

Produits


Version

R2025a

Community Treasure Hunt

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

Start Hunting!

Translated by