<para>
   Unicsv examines the first line of a file to determine the field
   order and field separator in that file.   On write, it tries to
   figure out what data it has and writes headers and all the data it can.
</para>
<para>
   Fields may be enclosed in double quotes.  To include a double quote inside quotes escape it with another double quote.
</para>
<para>
   If the first line contains any unenclosed tabs then the data lines are assumed to be tab separated.
   Otherwise if the first line contains any unenclosed semicolons then fields are assumed to be separated by semicolons.
   Otherwise if the first line contains any unenclosed vertical bars then fields are assumed to be separated by vertical bars.
   Otherwise the fields are assumed to be separated by commas.
</para>
<para>
   The list of keywords include:
   <screen>
      alt =      Elevation (in meters).  For feet use "alt ft", "altft", "alt feet", or "altfeet".
      arch =     <link linkend="style_def_isarchived">Geocache archived flag</link>
      avail =    <link linkend="style_def_isavailable">Geocache available flag</link>
      bng_e =    British National Grid's easting
      bng =      full coordinate in BNG format (zone easting northing)
      bng_pos =  full coordinate in BNG format (zone easting northing)
      bng_n =    British National Grid's northing
      bng_z =    British National Grid's zone
      caden =    Cadence
      comment =  Notes
      cont =     <link linkend="style_def_geocontainer">Geocache container</link>
      cour =     Heading / Course true
      date =     Date (yyyy/mm/dd)
      depth =    Depth (in meters).  For feet use "depth ft", "depthft", "depth feet", or "depthfeet".
      desc =     Description
      diff =     <link linkend="style_def_geodiff">Geocache difficulty</link>
      ele =      Elevation (in meters).  For feet use "ele ft", "eleft", "ele feet", or "elefeet".
      e/w =      'e' for eastern hemisphere, 'w' for western
      found =    <link linkend="style_def_geofound">Geocache last found date</link>
      fix =      3d, 2d, etc.
      gcid =     Geocache cache id. This accepts GC-ID ("575006") and GC-Code ("GC1234G").
      geschw =   Geschwindigkeit (speed)
      hdop =     Horizontal dilution of precision
      head =     Heading / Course true
      heart =    Heartrate
      height =   Elevation (in meters).  For feet use "height ft", "heightft", "height feet", or "heightfeet".
      hint =     <link linkend="style_def_geohint">Geocache cache hint</link>
      icon =     Symbol (icon) name
      lat =      Latitude
      lon =      Longitude
      name =     Waypoint name ("Shortname")
      n/s =      'n' for northern hemisphere, 's' for southern
      notes =    Notes
      pdop =     Position dilution of precision
      placer =   <link linkend="style_def_geoplacer">Geocache placer</link>
      placer_id =Geocache placer id
      power =    Cycling power (in Watts)
      prox =     Proximity (in meters).  For feet use "prox ft", "proxft", "prox feet", or "proxfeet".
      sat =      Number of sats used for fix
      speed =    Speed, in meters per second. (See below)
      symb =     Symbol (icon) name
      tempf =    Temperature (degrees Fahrenheit)
      temp =     Temperature (degrees Celsius)
      terr =     <link linkend="style_def_geoterr">Geocache terrain</link>
      time =     Time (hh:mm:ss[.msec])
      type =     <link linkend="style_def_geotype">Geocache cache type</link>
      url =      URL
      utc_d =    UTC date
      utc_t =    UTC time
      utm_c =    UTM zone character
      utm_e =    UTM easting
      utm =      full coordinate in UTM format (zone zone-ch easting northing)
      utm_pos =  full coordinate in UTM format (zone zone-ch easting northing)
      utm_n =    UTM northing
      utm_z =    UTM zone
      vdop =     Vertical dilution of precision
      x =        Longitude
      x_pos =    Longitude
      y =        Latitude
      y_pos =    Latitude
      z =        Elevation (in meters)
   </screen>
   We support some enhanced Garmin attributes. They are also available in
   <link linkend="fmt_gpx">gpx</link>, <link linkend="fmt_gdb">gdb</link>,
   <link linkend="fmt_garmin_gpi">garmin_gpi</link> and partly
   <link linkend="fmt_garmin_txt">garmin_txt</link>. These entities are currently
   not visible in <trademark>MapSource</trademark> (6.12.4), but are NOT dropped
   when working with GDB (version 3) or GPX files.
   <screen/>
   Please note, that these do NOT provide a geocoding service; don't expect
	to "convert" a street address to a latitude and longitude.
   <screen>
      addr =     Street address
      city =     City
      country =  Country
      faci =     Facility (not available in GPX)
      phone =    Phone number
      post =     Postal code
      state =    State
   </screen>
   Fuller spellings (i.e. "longitude") may be used. You can also
   use keywords with a whitespace instead of an underscore.
</para>
<para>
   A typical file may be:
   <screen>
     Name, Latitude, Longitude, Description
     GCEBB,35.972033,-87.134700,Mountain Bike Heaven by susy1313
     GC1A37,36.090683,-86.679550,The Troll by a182pilot &amp; Family
   </screen>
</para>
<para>
   If processing data from the UK, GPSBabel can process coordinates using X,Y values (often referred to as Eastings/Northings) as shown in <xref linkend="uk_unicsv_1"/> or the full 12 figure alpha numeric, as shown in <xref linkend="uk_unicsv_2"/>.
   Note in <xref linkend="uk_unicsv_2"/> you need to split your original X,Y values into the 100Km 2 character code,
   eastings and northing values.
   <example xml:id="uk_unicsv_1">
     <title>CSV input for UK data with XY coordinates</title>
     <screen>
       bng_e,bng_n,name,date
       353729,177210,id_001,2018/02/03
       356025,181221,id_002,2018/02/03
       357962,181528,id_003,2018/03/03
     </screen>
   </example>
   <example xml:id="uk_unicsv_2">
     <title>CSV input for UK data with alphanumeric coordinates</title>
     <screen>
       bng_z,bng_e,bng_n,name,date
       ST,53729,77210,id_001,2018/02/03
       ST,56025,81221,id_002,2018/02/03
       ST,57962,81528,id_003,2018/03/03
     </screen>
   </example>
</para>
<para>
   On the output side unicsv writes fixed number of columns (waypoint index, latitude and longitude)
   followed by a variable column list depending on internal data.
</para>
<para>
   With at least ONE valid timestamp in data a unicsv output may look like that:
   <screen>
     No,Name,Latitude,Longitude,Description,Date,Time
     1,"GCEBB",35.972033,-87.134700,"Mountain Bike Heaven by susy1313",2003/06/29,09:00:00
     2,"GC1A37",36.090683,-86.679550,"The Troll by a182pilot &amp; Family",,
   </screen>
</para>

<para>
For speed, a units specifier can be added to override the default. Here
are some values, but check parse_speed() in parse.cc for the authoritative
list.
<itemizedlist>
<listitem><para>m/s, mps: meters per second</para></listitem>
<listitem><para>km/h, kmh: kilometers per hour</para></listitem>
<listitem><para>kt, knots: knots</para></listitem>
<listitem><para>mph, mi/h, mih: miles per hour</para></listitem>
</itemizedlist>
</para>
