/// <summary> Constructor.</summary> /// <param name="hdr">record header /// </param> /// <param name="aIs">IS section /// </param> /// <param name="aPds">PDS section /// </param> /// <param name="aGds">GDS section /// </param> /// <param name="offset">to the BMS/BDS section of file /// </param> /// <param name="recOffset">to the EndOfRecord /// </param> public Grib1Record(System.String hdr, Grib1IndicatorSection aIs, Grib1ProductDefinitionSection aPds, Grib1GridDefinitionSection aGds, long offset, long recOffset) { header = hdr; is_Renamed = aIs; pds = aPds; gds = aGds; dataOffset = offset; endRecordOffset = recOffset; }
private long recordOffset = -1; // The byte offset of this grib record (message) in the file from which it was read. #endregion Fields #region Constructors /// <summary> Constructor.</summary> /// <param name="hdr">record header /// </param> /// <param name="aIs">IS section /// </param> /// <param name="aPds">PDS section /// </param> /// <param name="aGds">GDS section /// </param> /// <param name="offset">to the BMS/BDS section of file /// </param> /// <param name="recOffset">to the EndOfRecord /// </param> public Grib1Record(System.String hdr, Grib1IndicatorSection aIs, Grib1ProductDefinitionSection aPds, Grib1GridDefinitionSection aGds, long offset, long recOffset) { header = hdr; is_Renamed = aIs; pds = aPds; gds = aGds; dataOffset = offset; endRecordOffset = recOffset; }
/// <summary> scans a Grib file to gather information that could be used to /// create an index or dump the metadata contents. /// /// </summary> /// <param name="getProducts">products have enough information for data extractions /// </param> /// <param name="oneRecord">returns after processing one record in the Grib file /// </param> /// <throws> NotSupportedException </throws> public void scan(bool getProducts, bool oneRecord) { long start = (System.DateTime.Now.Ticks - 621355968000000000) / 10000; // stores the number of times a particular GDS is used //UPGRADE_TODO: Class 'java.util.HashMap' was converted to 'System.Collections.Hashtable' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilHashMap'" System.Collections.Hashtable gdsCounter = new System.Collections.Hashtable(); Grib1ProductDefinitionSection pds = null; Grib1GridDefinitionSection gds = null; long startOffset = -1; //System.out.println("file position =" + raf.Position); while (raf.Position < raf.Length) { if (seekHeader(raf, raf.Length, out startOffset)) { // Read Section 0 Indicator Section Grib1IndicatorSection is_Renamed = new Grib1IndicatorSection(raf); //System.out.println( "Grib record length=" + is.getGribLength()); // EOR (EndOfRecord) calculated so skipping data sections is faster long EOR = raf.Position + is_Renamed.GribLength - is_Renamed.Length; // Read Section 1 Product Definition Section PDS pds = new Grib1ProductDefinitionSection(raf); if (pds.LengthErr) { continue; } if (pds.gdsExists()) { // Read Section 2 Grid Definition Section GDS gds = new Grib1GridDefinitionSection(raf); } else { // GDS doesn't exist so make one //System.out.println("GribRecord: No GDS included."); //System.out.println("Process ID:" + pds.getProcess_Id() ); //System.out.println("Grid ID:" + pds.getGrid_Id() ); gds = (Grib1GridDefinitionSection) new Grib1Grid(pds); } // obtain BMS or BDS offset in the file for this product long dataOffset = 0; if (pds.Center == 98) { // check for ecmwf offset by 1 bug int length = (int)GribNumbers.uint3(raf); // should be length of BMS if ((length + raf.Position) < EOR) { dataOffset = raf.Position - 3; // ok } else { dataOffset = raf.Position - 2; } } else { dataOffset = raf.Position; } // position filePointer to EndOfRecord raf.Seek(EOR, System.IO.SeekOrigin.Begin); //System.out.println("file offset = " + raf.Position); // assume scan ok if (getProducts) { Grib1Product gp = new Grib1Product(header, pds, getGDSkey(gds, gdsCounter), dataOffset, raf.Position); products.Add(gp); } else { Grib1Record gr = new Grib1Record(header, is_Renamed, pds, gds, dataOffset, raf.Position, startOffset); records.Add(gr); } if (oneRecord) { return; } // early return because ending "7777" missing if (raf.Position > raf.Length) { raf.Seek(0, System.IO.SeekOrigin.Begin); System.Console.Error.WriteLine("Grib1Input: possible file corruption"); checkGDSkeys(gds, gdsCounter); return; } } // end if seekHeader //System.out.println( "raf.Position=" + raf.Position); //System.out.println( "raf.Length=" + raf.Length ); } // end while raf.Position < raf.Length //System.out.println("GribInput: processed in " + // (System.currentTimeMillis()- start) + " milliseconds"); checkGDSkeys(gds, gdsCounter); return; } // end scan
/// <summary> scans a Grib file to gather information that could be used to /// create an index or dump the metadata contents. /// /// </summary> /// <param name="getProducts">products have enough information for data extractions /// </param> /// <param name="oneRecord">returns after processing one record in the Grib file /// </param> /// <throws> NotSupportedException </throws> public void scan(bool getProducts, bool oneRecord) { long start = (System.DateTime.Now.Ticks - 621355968000000000) / 10000; // stores the number of times a particular GDS is used //UPGRADE_TODO: Class 'java.util.HashMap' was converted to 'System.Collections.Hashtable' which has a different behavior. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1073_javautilHashMap'" IDictionary<string,int> gdsCounter = new Dictionary<string,int>(); Grib1ProductDefinitionSection pds = null; Grib1GridDefinitionSection gds = null; long startOffset = -1; //System.out.println("file position =" + raf.Position); while (raf.Position < raf.Length) { if (seekHeader(raf, raf.Length, out startOffset)) { // Read Section 0 Indicator Section Grib1IndicatorSection is_Renamed = new Grib1IndicatorSection(raf); //System.out.println( "Grib record length=" + is.getGribLength()); // EOR (EndOfRecord) calculated so skipping data sections is faster long EOR = raf.Position + is_Renamed.GribLength - is_Renamed.Length; // Read Section 1 Product Definition Section PDS pds = new Grib1ProductDefinitionSection(raf); if (pds.LengthErr) continue; if (pds.gdsExists()) { // Read Section 2 Grid Definition Section GDS gds = new Grib1GridDefinitionSection(raf); } else { // GDS doesn't exist so make one //System.out.println("GribRecord: No GDS included."); //System.out.println("Process ID:" + pds.getProcess_Id() ); //System.out.println("Grid ID:" + pds.getGrid_Id() ); gds = (Grib1GridDefinitionSection) new Grib1Grid(pds); } // obtain BMS or BDS offset in the file for this product long dataOffset = 0; if (pds.Center == 98) { // check for ecmwf offset by 1 bug int length = (int)GribNumbers.uint3(raf); // should be length of BMS if ((length + raf.Position) < EOR) { dataOffset = raf.Position - 3; // ok } else { dataOffset = raf.Position - 2; } } else { dataOffset = raf.Position; } // position filePointer to EndOfRecord raf.Seek(EOR, System.IO.SeekOrigin.Begin); //System.out.println("file offset = " + raf.Position); // assume scan ok if (getProducts) { Grib1Product gp = new Grib1Product(header, pds, getGDSkey(gds, gdsCounter), dataOffset, raf.Position); products.Add(gp); } else { Grib1Record gr = new Grib1Record(header, is_Renamed, pds, gds, dataOffset, raf.Position, startOffset); records.Add(gr); } if (oneRecord) return ; // early return because ending "7777" missing if (raf.Position > raf.Length) { raf.Seek(0, System.IO.SeekOrigin.Begin); //System.Console.Error.WriteLine("Grib1Input: possible file corruption"); checkGDSkeys(gds, gdsCounter); return ; } } // end if seekHeader //System.out.println( "raf.Position=" + raf.Position); //System.out.println( "raf.Length=" + raf.Length ); } // end while raf.Position < raf.Length //System.out.println("GribInput: processed in " + // (System.currentTimeMillis()- start) + " milliseconds"); checkGDSkeys(gds, gdsCounter); return ; }