Hello,
I'm looking for a way to write to a .csv file.
I found the keywords for OPEN and READ to work with a data file, but did not find how WRITE to a csv file.
Can someone help please?
Raphael Levy
Hello,
I'm looking for a way to write to a .csv file.
I found the keywords for OPEN and READ to work with a data file, but did not find how WRITE to a csv file.
Can someone help please?
Raphael Levy
Raphael -
There might be better ways, but I've been using this method for many years. See code below. Some key items:
Use OUTPUT to redirect print statements.
The file is CSV only because the print statments include a ' , ' as a seperator.
I use the append mode because the first thing to go into the file is the lens name, then each print statement is appended.
I convert the file from unicode to ANSI. Matlab and other programs handle ANSI text files better, or least that was true.
Best regards,
John
! File: Eval_T_distance
direc_log$ = 'C:\Dropbox\'
log_filename$ = direc_log$ + 'data.csv'
output log_filename$
current_lens_name$ = $FILENAME()
print current_lens_name$
output screen
focus_adjust_surface = 3
for t_tele=90,115,2.5
Setsurfaceproperty focus_adjust_surface,thic, t_tele
UPDATE ALL
! this next line updates the merit function...
! The merit function is in the lens, but you could load it...
cause_evaluation = MFCN()
! pull out the value from the merit function....
rms_diam_mm=oper(6,10)
! You have to print to the screen AND to a filename to see what is going on...
format 7.4
print t_tele, ' , ',rms_diam_mm
!format 10.7
output log_filename$, append
print t_tele, ' , ',rms_diam_mm
output screen
next
unicode_to_ansi=1
CONVERTFILEFORMAT log_filename$, unicode_to_ansi
!showfile log_filename$, 1
label lbl_end
print ' '
print ' --- ! ALL DONE ---'
print ' --- ! Close this window before opening a new lens!!! ---'
end
Hi, try this:
! Write out a comma separated list of 5 variables A, B, C, D and E
! Define the delimiter
delimiter$ =', '
A = 1
B = 2
C = 3
D = 4
E = 5
! Now write out a comma-separated list
PRINT A, delimiter$, # the comma at the ends means no CR/LF
PRINT B, delimiter$,
PRINT C, delimiter$,
PRINT D, delimiter$,
PRINT E # no delimiter, and no comma at end so also write a CR/LF
Print 'Program End'
END
Note that the delimiter contains a comma and a space. The space is not required for CSV, but it makes the output more human-friendly:
Executing C:\Users\markg\Documents\Zemax\MACROS\CSV.ZPL.
1.0000, 2.0000, 3.0000, 4.0000, 5.0000
Program End
Then as John shows, redirect the PRINT statements to a file using OUTPUT. Use a filename ending in .CSV. Also use FORMAT to give the decimal precision you need.
John, does Matlab still not accept Unicode text? Sheesh, it's only been the Windows standard text format since Windows 95...
- Mark
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.