fprintf file timestamp to csv

2 views (last 30 days)
Tammy Chen
Tammy Chen on 12 Sep 2016
Commented: dpb on 16 Sep 2016
Hi All, I have a directory with unknown number of text files.
fid = dir('*.txt');
How do I fprintf the timestamps (file.date) of all of these files to a csv file? I tried using the datestr() function,datetime(),cell2mat(), brackets {} and [], & cell2str() functions but they don't work and generate errors when I tried to fprinf it to the csv.
Any pointers would help.
Thanks,

Accepted Answer

dpb
dpb on 12 Sep 2016
Edited: dpb on 12 Sep 2016
fid isn't good variable name for a directory list; too much associated with a file handle.
d=dir('*.txt'); % the directory structure
fid=fopen('file.date','w'); % open an output file
cellfun(@(s) fprintf(fid,'"%s"\n',s),cellstr(char(d.date))) % and write them out quote-delimited
fid=fclose(fid); % done--close file
  2 Comments
Tammy Chen
Tammy Chen on 13 Sep 2016
Thanks! I was able to incorporate this line into another series of loops so I can print the timestamp out with other stats and file info I need from the data.
cellfun(@(s) fprintf(fid,'"%s"\n',s),cellstr(char(d.date)))
Several questions though, 1. Why do I need to use the cell function for fprintf the "s"? 2. What makes datetime special that it has to be quote delimited in order to be printed as a string? Sorry if my question doesn't make any sense, since I'm still a novice in cell-handling.
Walter Roberson
Walter Roberson on 13 Sep 2016
You do not need to use a cellfun to handle the printing: the solution I gave using a temporary variable handles the task without using cellfun.
The timestamps include characters such as '-' and ':' and spaces that are not valid numbers. The format for csv files requires that strings in csv files be enclosed in double-quotes. The double-quotes being used there are not for the purpose of getting MATLAB to emit strings: they are there to get MATLAB to emit strings that are properly-formatted csv

Sign in to comment.

More Answers (1)

Walter Roberson
Walter Roberson on 13 Sep 2016
d = dir('*.txt');
dates = {d.date};
fid = fopen('file.csv', 'wt');
fprintf(fid, '"%s"\n', dates{:});
fclose(fid);
No loop is needed.
  19 Comments
Walter Roberson
Walter Roberson on 16 Sep 2016
They are not fixed length.
dpb
dpb on 16 Sep 2016
I had presumed not; wondered, though, about an array then...guess they're more classes/objects overhead to deal with, then. At this stage of the game I wonder why also but would likely have been preference over the cellstr route they took first...

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!