[ncl-talk] Array initialization question
Dave Allured - NOAA Affiliate
dave.allured at noaa.gov
Mon Jul 2 15:32:51 MDT 2018
Oops, I missed a simpler approach which is fine when your returned arrays
do not need any custom attached attributes.
function data_read(rfile[1]:string)
begin
x = True ; simple container variable
recon_data := asciiread(rfile,-1,"string")
x at lat = stringtofloat(str_get_cols(recon_data, 9,15))
x at lon = stringtofloat(str_get_cols(recon_data, 23,29))
return (x)
end
Main script:
rdat = data_read(file)
printVarSummary (rdat at lat)
printVarSummary (rdat at lon)
--Dave A.
On Mon, Jul 2, 2018 at 2:57 PM, Dave Allured - NOAA Affiliate <
dave.allured at noaa.gov> wrote:
> Dave V,
>
> Here is one possible approach which I have used in similar applications.
>
> function data_read(rfile[1]:string,var[1]:string)
> begin
> recon_data := asciiread(rfile,-1,"string")
> if (var .eq. "lat") then
> return (stringtofloat(str_get_cols(recon_data, 9,15)))
> end if
> if (var .eq. "lon") then
> return (stringtofloat(str_get_cols(recon_data, 23,29)))
> end if
> ; optional handling here for "unknown variable name"
> end
>
> Main script:
>
> lat = data_read(file,"lat")
> lon = data_read(file,"lon")
>
> This might seem klunky, but it avoids predefinition tricks and is fairly
> simple, given the constraints of NCL procedure calling.
>
> --Dave
>
>
> On Mon, Jul 2, 2018 at 2:10 PM, Vollaro, David <dvollaro at albany.edu>
> wrote:
>
>> Hi,
>>
>>
>> I have created a procedure to read an ASCII dataset. The procedure will
>> fill several 1D variable arrays and pass them back to the main NCL script.
>> My problem is that the call statement contains several variables that have
>> not been previously defined. The length of these arrays will be determined
>> in the procedure and is dataset dependent. Is there a way to predefine a
>> variable array w/o knowing its size? Attached is a snippet of code:
>>
>>
>> Dave Vollaro
>>
>> ...
>>
>> main script...
>>
>>
>> data_read(file,lat,lon)
>>
>> ....
>>
>> procedure data_read(rfile:string,rlat[*]:float,rlon[*]:float)
>> begin
>>
>> recon_data := asciiread(rfile,-1,"string")
>> rlat = stringtofloat(str_get_cols(recon_data, 9,15))
>> rlon = stringtofloat(str_get_cols(recon_data, 23,29))
>> return
>>
>> end
>> fatal:Variable (lat) is undefined
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20180702/5eac770e/attachment.html>
More information about the ncl-talk
mailing list