The loadl() method that is provided will attempt to invoke the correct file reader based on one or more characteristics of the filename or it's form. For example, files with an extension ".dods" will be read using the DODS File Adapter.
You may, of course, also use Jython's File I/O to read data, and then create your own VisAD Data object.
a = load("mydata.txt")would invoke the VisAD Text Adapter to read the file "mydata.txt" and create a VisAD Data object, which is then referred to by the symbol a. Whereas,
a = load("mymodel.nc")would invoke the VisAD netCDF (Plain) Adapter to read the file "mymodel.nc" and create a VisAD Data object.
If you are reading a file that you are not familiar with, you might want to take a look at the VisAD structure associated with this. If you command: dumpType(name) you will get a listing of the entire structure. See Using data types functions for more details.
It is important, however, to document the following: If you need to access any class in the visad.data package (or its sub-packages), you must first do: "from visad import *" in order to the gain access to the desired File Adapter class. For example, to read Point data via ADDE, I'd need to use:
from visad import * from visad.data.mcidas import PointDataAdapter ... obs=PointDataAdapter("adde://host.dom/pointdata?....") ...
import math output = open('myfile.txt','w') for x in range(0,360,10): output.write(repr(math.sin(x*.0174533))+'\n') output.close()Running this Jython script creates a file named myfile.txt with the 37 values of the sin() function, every 10 degrees. Now, let's read this data into a Jython list of floating point values named "z":
input=open("myfile.txt",'r') m=input.readlines() input.close() z= for v in m: z.append(float(v))At this point if you just enter z on the command line, you'll see the values listed. Next, we need to turn these values into a VisAD Data object. Since this is a one-dimensional set of values, linearly spaced, we can simply use the field() function:
f = field(z)To show this, of course, just use the plot() function:
plot(f)It will look like this:
There are several variations on the field function that are outlined in that section (hyperlink).
If you need to use binary files, Jython provides a 'b' option on the open() method to supress most character translation (for example, newline), plus you will probably need to use the struct module to translate between character/byte streams and internal/binary formats. See Python documentation on struct module.
Here's a short example:
import struct f = open("OUTLUSAM", "rb") g = f.read(12) h = struct.unpack("3i", g) print h (857, 800000, 801490)The "12" in the read() says read 12 bytes. The "3i" format in the unpack() says to translate the 12 bytes in g as 3 integers. The struct formatting has many options, including byte-order swapping if you need it.