why matlab won't support file name length more than 63 char?

조회 수: 129 (최근 30일)
gvreddy
gvreddy 2015년 6월 22일
댓글: David J. Mack 2022년 10월 10일
Is there any limitations with respect to operating system, controllers or anything?
Please can someone explain me clearly what could be the possible reason?
  댓글 수: 1
Henric Rydén
Henric Rydén 2015년 6월 22일
I have never heard of this issue. I tried creating a folder with 115 characters in it and it worked.

댓글을 달려면 로그인하십시오.

채택된 답변

Jan
Jan 2015년 6월 22일
편집: Jan 2015년 6월 22일
No, Matlab supports longer file names. Some commands are limited by the file system, e.g. deleteinmg files to the recycle bin under Windows suffers from the horrible limit of 260 characters for the path name. But for a simple file copy etc. wide names are accepted, which allows 32767 characters. (Please feel free to send a letter to Bill Gates and ask him, why the 260 characters limit is still prsent in teh 2015'th Windows 10.)
Under Linux/MacOS long file names are supported in general.
But the names of variables are limitd to 63 characters. Perhaps this is your question. This limit is useful, because longer names for variables are ridiculous and cannot be read or debugged anymore. Such long names are a secure hint, that the programmer hides information in the name of the variable. But such information should be found in the data, in the values of the variables, e.g. by using structs with an extra field for these information.
As the names of variables, the names of functions are limitted als for the same reason.
Beside the readability and the idea of smart code design, the symbols can be managed more efficiently, if the length of the names is limited. E.g. the fieldnames of a struct can be stored in blocks of a fixed width: For each fieldname 64 bytes are reserved (63 characters plus a trailing \0). This allows to find the n'th field name without considering the lengths of the former n-1.th names. In consequence the lookup tables for finding variables in the workspace or fields in a struct can be processed faster, when the length of the names is limited.
The limit was 31 characters until Matlab 5.3.
  댓글 수: 20
Walter Roberson
Walter Roberson 2016년 11월 10일
Yes, system names must be MATLAB identifiers. Simulink models are callable by name in MATLAB so they have to meet the identifier requirements
David J. Mack
David J. Mack 2022년 10월 10일
I disagree with the "are ridiculous and cannot be read" part. When writing unittests it is utterly important to make them self-explanatory. A usual naming scheme consists of three parts - the name of the unit-under-test (aka function), the precondition (what am I doing?) and the expected results (what is supposed to happen; not the same as what is supposed to be returned!). In this case, you often have longer names, which are actually very helpful for understanding & debugging. And the length limitation actually enforcers developers to make shortened names which often end-up being so cryptic, that you cannot really derive anything from it.
So yes, make variable names that long might not make too much sense. But for functions this isn't true.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Steven Lord
Steven Lord 2015년 6월 22일
The limitation applies to the types of identifiers listed in the documentation for NAMELENGTHMAX.
If you want to create a MAT-file with an extremely long name you can do that, as MAT-file names is not one of the categories listed in that documentation. If you want to create a variable or a script file with an extremely long name, you will receive a warning and the name will be truncated.
I agree with Jan's assessment -- if you are trying to create a variable with a 70, 80 character name you're probably trying to encode some information in it that is more appropriate to store as data rather than as part of the name. For that I'd consider a separate variable or storing the two pieces of data in a struct array.
  댓글 수: 8
Adam
Adam 2018년 8월 7일
I can't actually find the section on packages in the Matlab help apart from this one which focuses on classes, but it is even simpler for functions.
Simply create a folder with a '+' at the front of its name and that becomes a package e.g.
+engine_temperature_model
Then inside that folder you create files called:
left_sensor_measurement_no_lowpass.m
right_sensor_measurement_10min_lowpass.m
etc
And when you refer to them in code or call them on the command line you refer to them as e.g.
engine_temperature_model.left_sensor_measurement_no_lowpass.m
i.e. the package name followed by '.' followed by the name, so the final thing is very similar to your long name, but you syphon off that common prefix into a package name.
I ebb and flow on whether or not I like packages. Since I write mostly classes I recently ended up using packages for inheritance which leads to the bizarre situation of me having loads of files with exactly the same name because the descriptive part that differs (the specialisation) is in the package name now rather than the filename, so when I open them in the editor they just all show up with the same name! They can still be useful for collecting together code though, and if you have a long scope where you refer to many functions from the same package you can just put e.g.
import engine_temperature_model
at the top and then you can just refer to each by its filename without needing to constantly prefix the package name.
KAE
KAE 2018년 8월 13일
This is good to know about, thanks!

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Naming Conventions에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by