MATLAB Maximize Storage with Matlab Diary Function | Txt File Limit Solution"

  • Thread starter Thread starter jemma
  • Start date Start date
  • Tags Tags
    Function Matlab
AI Thread Summary
The discussion centers on using MATLAB's diary function to log simulation results into a text file, specifically addressing concerns about file size limitations when storing a large volume of data, such as 50,000 rows. It clarifies that the diary function captures only what is displayed in the Command Window, leading to potential data loss. Users are encouraged to utilize the fprintf function for more control over data logging, as it allows for writing data to a file without size constraints. The conversation also delves into the formatting options in fprintf, explaining the significance of the width specifiers (%4.2f and %8.3f) in controlling the output's appearance, including how they determine the minimum number of characters printed and the rounding of values. The discussion provides practical examples to illustrate these formatting concepts.
jemma
Messages
35
Reaction score
0
I am using the diary function to store simulation results into a txt file, e.g.

diary('TextLog.txt')

however I expect to have around 50,000 rows of data and so not all my data will be stored. Is there anything I can do to specify the size of the file? Am I right in thinking the file will only hold what is displayed in the Command Window? If so, is there a way to change this? Unless there is a different command I can use? Thanks if you can help!
 
Physics news on Phys.org
how about writing your data to a file, no size limits...
 
Yes thanks, I've been trying to do this using fprintf.

With the example here: http://www.mathworks.com/help/techdoc/ref/fprintf.html

B = [8.8 7.7 ; ...
8800 7700];
fprintf('X is %4.2f meters or %8.3f mm\n', 9.9, 9900, B)
MATLAB displays:

X is 9.90 meters or 9900.000 mm
X is 8.80 meters or 8800.000 mm
X is 7.70 meters or 7700.000 mm

What does the %4.2f and %8.3f do apart from rounding values to 2 and 3 decimal places respectively? i.e. what's the 4 and 8?
Thanks!
 
The 4 and 8 specify the width of the printed output. So, for %8.3f, if you has 12.345, it would print:
Code:
  12.345
and if you had 0.1236 it would print:
Code:
   0.124
padding with whitespace so that the column width is 8.

Try this code to see how that works:
Code:
number = 12.3456789;
for i=1:10;
    format = sprintf('%%%i.3f\n', i);
    fprintf(format, number);
end

It should produce:
Code:
12.346
12.346
12.346
12.346
12.346
12.346
 12.346
  12.346
   12.346
    12.346

MATLAB fprintf() documentation said:
  • Field width
Minimum number of characters to print. Can be a number, or an asterisk (*) to refer to an argument in the input list. For example, the input list ('%12d', intmax) is equivalent to ('%*d', 12, intmax).
 
Last edited:

Similar threads

Back
Top