ECCC-MSC / libecbufr

libecbufr is a general purpose, template-oriented BUFR encoding/decoding library
Other
10 stars 7 forks source link

Can convert FM-71(GTS Format) to BUFR Using libecbufr library #73

Closed tomkralidis closed 4 years ago

tomkralidis commented 4 years ago

Moved from https://answers.launchpad.net/libecbufr/+question/231387

Can convert FM-71(GTS Format) to BUFR Using libecbufr library

Asked by kihwan kim on 2013-06-26

I'm suppose to convert FM-71(GTS Format) to BUFR. So, I would like to use libecbufr library. Is it possible to use libecbufr library for converting GTS Format to BUFR? If it is possible, can I know the way to use libecbufr library and get Sample source code? Question information

Language: English Edit question

Status: Answered

For: libECBUFR Edit question

Assignee: No assignee Edit question

Last query: 2013-06-26

Last reply: 2013-06-26

Related bugs

Link existing bug 

Related FAQ:

None Link to a FAQ

Yves Pelletier (yves-pelletier) said on 2013-06-26: #1

Hello Kihwan,

There is currently no ready-made software application in libecbufr to convert FM-71 CLIMAT to BUFR CLIMAT messages. It could be done: such an application could be written with libecbufr. However, the Meteorological Service of Canada has no plans to do so. The main reason for this is that Canada's migration plan is to create the BUFR SYNOP, TEMP and CLIMAT from raw data. We are not converting existing Traditional Alphanumeric Bulletins to BUFR.

But let me try to help you out. One way to get started would be to use the bufr_encoder and bufr_decoder utilities.

With libecbufr installed, try the following commands (assuming you use bash):

$ echo $BUFR_TABLES

if nothing happens, then type

$ export BUFR_TABLES=/usr/share/libecbufr

you only need to do this once in this session.

$ bufr_encoder -sequence 307073 -outbufr 307073.bufr

This created a BUFR file called 307073.bufr, which has the structure of CLIMAT but contains only "missing" values.

$ bufr_decoder -inbufr 307073.bufr

This gave you a human-readable display of the BUFR file, just to be sure we have a valid BUFR file. Next, we will create the ascii data file that you can populate with actual values.

$bufr_decoder -inbufr 307073.bufr -dump -otemplate 307073_template.txt -output 307073_data.txt

This gave you a file 307073_data.txt that you can edit and then re-encode into BUFR. So what you could do is parse your FM-71 to extract data values, then populate 307073_data.txt with these values (replacing "MSNG" as required) and then encode into BUFR. The command to re-encode is:

$bufr_encoder -datafile 307073_data.txt -template 307073_template.txt -outbufr 307073.bufr

This gives you a file 307073.bufr encoded from your ascii data file with updated values.

This whole approach is not as clean as writing a dedicated program with libecbufr library calls, but it can get the job done.

I hope this helped.

kihwan kim (src-kimkh) said on 2013-06-27: #2

Thank you for helping me. I will try your advise and then mention the result. I hope that your advise will be helped too.