write_table
Writes formatted elements from a list to an ASCII file.
Available in version 6.1.0 and later.
Prototype
procedure write_table ( filename [1] : string, option [1] : string, alist [1] : list, format [1] : string )
Arguments
filenameThe ASCII file name for sending the formatted output.
optionOption for how to write to the file: "w" to overwrite, "a" to append.
alistThe list of variables to write to the file.
formatThe format string indicating how to write each item in the list.
Description
This procedure writes or appends formatted elements from a list to the given ASCII file, using the given format string.
Use print_table if you simply want to print the formatted values to the screen (stdout).
See Also
print_table, write_matrix, asciiwrite, sprintf, sprinti
Examples
Example 1
A simple example showing how to write an array of strings and integers to a file:
strings = (/"string11","string12","string13"/)
numbers = (/1,2,3/)
alist = [/strings,numbers/]
write_table("example1.txt", "w", alist, "%s")
The example1.txt file will contain:
string11 1 string12 2 string13 3
Note that write_table automatically inserted spaces between the strings and integers. If you don't want the spaces, then you will need to append the integers yourself:
strings = (/"string11","string12","string13"/)
numbers = (/1,2,3/)
alist = [/strings + numbers/] ; Use '+' to concatenate numbers to end of strings
write_table("example1.txt", "w", alist, "%s")
The example1.txt file will now contain no spaces:
string111 string122 string133
Example 2
This example shows how to initially create a file with the "w" option, and then append data to it using the "a" option. This is useful for creating a file with header text, data, and footer text.
a = (/111, 222, 333, 444/)
b = (/1.1, 2.2, 3.3/)
c = (/"1", "22", "333", "aaaaaa", "bbbb", "cc"/)
d = (/11h, 22h/)
f = (/11l, 22l, 33l, 44l, 55l, 66l/)
alist = [/a, b, c, d, f/]
header = (/"--------------------------------", \
"This is a file header", \
"--------------------------------"/)
footer = (/"--------------------------------", \
"This is a file footer", \
"--------------------------------"/)
hlist = [/header/]
flist = [/footer/]
fname = "example2.txt"
write_table(fname, "w", hlist, "%s")
write_table(fname, "a", alist, "%d%16.2f%s%d%ld")
write_table(fname, "a", flist, "%s")
The example2.txt file will contain:
--------------------------------
This is a file header
--------------------------------
111 1.10 1 11 11
222 2.20 22 22 22
333 3.30 333 33
444 aaaaaa 44
bbbb 55
cc 66
--------------------------------
This is a file footer
--------------------------------
Example 3
This is similar to the previous example, except now commas are inserted in the data fields.
a = (/111, 222, 333, 444/)
b = (/1.1, 2.2, 3.3/)
c = (/"a", "b", "c"/)
d = (/11h, 22h/)
f = (/11l, 22l, 33l, 44l, 55l, 66l/)
alist = [/a, b, c, d, f/]
header = (/"--------------------------------", \
"This is a file header", \
"--------------------------------"/)
footer = (/"--------------------------------", \
"This is a file footer", \
"--------------------------------"/)
hlist = [/header/]
flist = [/footer/]
fname = "example3.txt"
write_table(fname, "w", hlist, "%s ")
write_table(fname, "a", alist, "%d,%16.2f,%s,%d,%ld")
write_table(fname, "a", flist, "%s ")
The example3.txt file will contain:
-------------------------------- This is a file header -------------------------------- 111, 1.10,a,11,11 222, 2.20,b,22,22 333, 3.30,c, ,33 444, , , ,44 , , , ,55 , , , ,66 -------------------------------- This is a file footer --------------------------------
Example 4
This example shows how you can format integers of different numbers of digits (e.g. '95' versus '105' or '905' versus '1005') so they are pre-padded with zeros:
i = ispan( 95,105, 1) j = ispan(905,1005,10) write_table("example4.txt","w",[/i,j/],"first_%05i second_%05i")
The example4.txt file will contain:
first_00095 second_00905 first_00096 second_00915 . . . first_00099 second_00945 first_00100 second_00955 first_00101 second_00965 first_00102 second_00975 . . . first_00105 second_01005
Example 5
The variable type must be appropriate for the format. If the user does not specify the width, then the function will use default settings.
sta = (/"Mum", "RNC", "CNB"/) ; type string
Temp = (/30, 20, 25/) ; type integer
RH = (/80, 900, 95/)
WS = (/2, 3, 4/)
WD = (/80, 150, 95/)
Time = 201411050800>b>l ; the appended 'l' makes this a 'long' int
; Temp, RH, WS, WD are all integers
file_I = "example5_I.txt"
system("/bin/rm -f "+file_I) ; remove any pre-existing file
write_table(file_I, "w", [/Time/], "%li")
write_table(file_I, "a", [/"Station","Temp","RH","WS","WD"/], "%s %s %s %s %s ")
write_table(file_I, "a", [/sta,Temp,RH,WS,WD/],"%s %i %i %i %i")
; change to float; use := syntax
Temp := (/30, 20, 25/)*1.0
RH := (/80, 900, 95/)*1.0
WS := (/2, 3, 4/)*1.0
WD := (/80, 150, 95/)*1.0
file_F = "example5_F.txt"
system("/bin/rm -f "+file_F) ; remove any pre-existing file
write_table(file_F, "w", [/Time/], "%li")
write_table(file_F, "a", [/"Station","Temp","RH","WS","WD"/], "%s %s %s %s %s ")
write_table(file_F, "a", [/sta,Temp,RH,WS,WD/],"%s %f %f %f %f")
With default settings for %i, the example5_I.txt file will contain:
201411050800 Station Temp RH WS WD Mum 30 80 2 80 RNC 20 900 3 150 CNB 25 95 4 95With default settings for %f, the example5_F.txt file will contain:
201411050800 Station Temp RH WS WD Mum 30.000000 80.000000 2.000000 80.000000 RNC 20.000000 900.000000 3.000000 150.000000 CNB 25.000000 95.000000 4.000000 95.000000