Hi,

I'm trying to put an answer together for SO, and I keep running into the
same difficulty. Given a CSV file, how can one produce an XML file with
latitude and longitude values properly quoted? Every time I get proper
quoting, "lat" and "lon" are scrambled (i.e. sometimes "lat" first,
sometimes "lat" second). Conversely, if I manage to restrict "lat/lon" to
the correct order, I lose the equals sign and proper (value) quotation. The
input file is as below:

11-06-2014 - 10:49:06PM lat = 41.858657; lon = -91.345142
11-06-2014 - 10:49:49PM lat = 42.864653; lon = -92.349914
11-06-2014 - 10:50:35PM lat = 43.874808; lon = -93.350364
11-06-2014 - 10:51:21PM lat = 44.885047; lon = -94.350058
11-06-2014 - 10:52:08PM lat = 45.895078; lon = -95.349920
11-06-2014 - 10:53:30PM lat = 46.905178; lon = -96.349837
11-06-2014 - 10:54:50PM lat = 47.910303; lon = -97.350606

While the desired output gives lat, lon, and moves the date/time to the end
of the line:

<wpt lat="41.858657" lon="-91.345142">
<time>11-06-2014 - 10:49:06PM</time>
</wpt>
<wpt lat="42.864653" lon="-92.349914">
<time>11-06-2014 - 10:49:49PM</time>
</wpt>
<wpt lat="43.874808" lon="-93.350364">
<time>11-06-2014 - 10:50:35PM</time>
</wpt>
<wpt lat="44.885047" lon="-94.350058">
<time>11-06-2014 - 10:51:21PM</time>
</wpt>
<wpt lat="45.895078" lon="-95.349920">
<time>11-06-2014 - 10:52:08PM</time>
</wpt>
<wpt lat="46.905178" lon="-96.349837">
<time>11-06-2014 - 10:53:30PM</time>
</wpt>
<wpt lat="47.910303" lon="-97.350606">
<time>11-06-2014 - 10:54:50PM</time>
</wpt>


So far, I can correctly swap the date/time to the end:

$ raku -MXML -e 'my @reordered = do for lines()
{(.words[3..*],.words[0..2])}; .put for @reordered;'  lat_lon.txt
lat = 41.858657; lon = -91.345142 11-06-2014 - 10:49:06PM
lat = 42.864653; lon = -92.349914 11-06-2014 - 10:49:49PM
lat = 43.874808; lon = -93.350364 11-06-2014 - 10:50:35PM
lat = 44.885047; lon = -94.350058 11-06-2014 - 10:51:21PM
lat = 45.895078; lon = -95.349920 11-06-2014 - 10:52:08PM
lat = 46.905178; lon = -96.349837 11-06-2014 - 10:53:30PM
lat = 47.910303; lon = -97.350606 11-06-2014 - 10:54:50PM

But using the "make-xml()" function from the XML module, I end up
scrambling "lat/lon":

$ raku -MXML -e 'my @xml = do for lines() {make-xml("wpt",
:lat(.words[5].subst(";")), :lon(.words[8]), \("time",.words[0..2]))}; .put
for @xml;'  lat_lon.txt
<wpt lon="-91.345142" lat="41.858657"><time>11-06-2014 -
10:49:06PM</time></wpt>
<wpt lon="-92.349914" lat="42.864653"><time>11-06-2014 -
10:49:49PM</time></wpt>
<wpt lat="43.874808" lon="-93.350364"><time>11-06-2014 -
10:50:35PM</time></wpt>
<wpt lat="44.885047" lon="-94.350058"><time>11-06-2014 -
10:51:21PM</time></wpt>
<wpt lat="45.895078" lon="-95.349920"><time>11-06-2014 -
10:52:08PM</time></wpt>
<wpt lon="-96.349837" lat="46.905178"><time>11-06-2014 -
10:53:30PM</time></wpt>
<wpt lon="-97.350606" lat="47.910303"><time>11-06-2014 -
10:54:50PM</time></wpt>

Any help appreciated,

Thanks, Bill.

REFERENCE:  https://unix.stackexchange.com/q/166675/227738

Reply via email to