how obtain the date from a NetCdf file
Javier Peña
javier.p at EREDA.COM
Fri Nov 6 03:06:23 EST 2009
Hi Matthias:
Thank you very much for your help ! I've gotten it
Best Regards:
Javier Peña
2009/11/5 Matthias Fripp <matthias.fripp at eci.ox.ac.uk>
> Sorry, I just noticed an error in how I formatted the numbers in my
> earlier reply. A corrected version of the script is below...
>
> -Matthias
>
> ====== revised message ===========
>
> To write out multiple columns of data, you would use something like this:
>
> *write a header in the file
> fname="output_file.csv"
> rc = write(fname,"date,u,v,temp,hgt")
> if (rc != 0)
> say "Error writing to file " fname
> return
> endif
>
> *find the time range set by the user
> *you may need to adjust this depending on your version of grads
> 'query dims'
> tmin = subwrd(result, 51)
> tmax = subwrd(result, 53)
>
> *loop through all times, writing out data
> timestep = tmin
> while timestep <= tmax
> 'set t ' timestep
> 'q time'
> datetime = subwrd(result, 3)
>
> * get the data for this time step
> * note: change all the "?_var" variables to match whatever is in your
> grib file
>
> 'd u_var'
> u = subwrd(result,4)
>
> 'd v_var'
> v = subwrd(result,4)
>
> 'd temp_var'
> temp = subwrd(result,4)
>
> 'd hgt_var'
> hgt = subwrd(result,4)
>
> * compose a line of text and write it to the output file
> outstr = datetime ',' u ',' v ',' temp ',' hgt
> rc = write(fname,outstr,append)
> if (rc != 0)
> say "Error writing to file " fname
> break
> endif
> timestep = timestep + 1
> endwhile
> close(fname)
> 'set t ' tmin ' ' tmax
>
> This script assumes you have previously selected a range of times with
> "set time" or "set t", and a single point with set lat, set lon, set x, set
> y, set z, etc. It can be extended pretty easily to loop across a range of
> x-y-z values if you want to do that instead.
>
> If you are working with remote data (e.g., in gradsdods), it will probably
> be much faster if you use the "define" statement to read in large chunks of
> data at once, and then loop through them locally. In that case, you may also
> want to use 'q defval' to read numeric values directly from the defined
> variable into your script variables, and then use math_format() to convert
> the numeric values to text before composing the output string.
>
> This creates a text file with commas between the values. I'm sure there's
> some way to specify tabs instead, but I'm not sure how.
>
> I hope that helps.
>
> Matthias
>
> On Nov 5, 2009, at 9:13 AM, Javier Peña wrote:
>
> Thank you very much Matthias:
>
> It works!
> I have another question . I wish if I get several variables, these appear
> in columns in the text file. Is this possible?
> I mean, I'd like a file.txt in which appears something similar to:
>
> Fecha u v temp hgt
> 00Z01JUN2009 -1.9065 0.225504 288.06 9385.06
> 12Z01JUN2009 1.02317 -1.33784 295.778 9385.06
> 00Z02JUN2009 -1.15094 -3.90728 290.077 9385.06
> 12Z02JUN2009 -0.65753 -1.19813 295.153 9385.06
> Thanks. Best Regards:
>
> Javier Peña
>
> 2009/11/4 Matthias Fripp <matthias.fripp at eci.ox.ac.uk>
>
>> you could use something like this:
>>
>> 'q time'
>> datetime = subwrd(result, 3)
>>
>> That will give you the date and time in grads format, e.g.,
>> "00Z01JAN1979". If you want, you could go further, with something like this:
>>
>> formatted_time = substr(datetime, 9, 4) '/' substr(datetime, 6, 3) '/'
>> substr(datetime, 4, 2) ' ' substr(datetime, 1, 2) ':00'
>> say "formatted time: " formatted_time
>>
>> Unfortunately, I don't know any way to convert "JAN" to "01" within grads.
>> So you may need to use awk (or similar) to convert the dates after-the-fact,
>> in which case you might as well just write the datetime directly to the
>> file, and then convert that later.
>>
>> Matthias
>>
>> On Nov 4, 2009, at 4:26 PM, Javier Peña wrote:
>>
>> Hello everyone,
>>
>> I have a netcdf file from which I can obtain any of the variables with the
>> following script (for example to get u wind component):
>>
>> * takes the values of the component or in a column
>> 'reinit'
>> 'sdfopen prueba.nc'
>> 'set lat 41'
>> 'set lon 359'
>> 'set lev 1'
>> to = 1
>> * Write the variable to a file
>> * 'set gxout vector'
>> * 'set fwrite z: \ dummy.dat'
>> while (to <5)
>> 'set t' to
>> tmp =''
>> tmp = subwrd (rerult, 4)
>> 'd u', tmp = tmp%''subwrd (result, 4)
>> rrc = write ( 'c: \ prueba_c \ pruebas_archivo_ecmwf \ new_u.txt', tmp)
>> to = to + 1
>> endwhile
>>
>> but my question is, can I get the date which belongs each variable value?
>> That is, if I have values for the velocity component u: 2.3, 3.4, 5.6, 3.9,
>> can I get a. txt what next?
>>
>> Date U (m / s)
>> 2009/12/06 00:00 2.3
>> 2009/12/06 06:00 3.4
>> 2009/12/06 18:00 5.6
>> 2009/12/07 00:00 3.9
>>
>> Thank you very much. Best regards.
>>
>> Javier Peña
>>
>>
>>
>
>
> --
> Javier Peña Álvarez
> Energías Renovables
> javier.p at ereda.com
> EREDA
>
> Tel: +34 91 5014755
> Fax: +34 91 5014756
> c/ Téllez 26, 28007 MADRID
> www.ereda.com
>
>
>
--
Javier Peña Álvarez
Energías Renovables
javier.p at ereda.com
EREDA
Tel: +34 91 5014755
Fax: +34 91 5014756
c/ Téllez 26, 28007 MADRID
www.ereda.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://gradsusr.org/pipermail/gradsusr/attachments/20091106/55ba1689/attachment.html
More information about the gradsusr
mailing list