GPX dosyalarını okuma ve sıralama

Womanne

Member
Windows PowerShell, çok sayıda XML dosyasını sıralama görevine hızlı bir çözüm sunar.


Bugün, GPS Değişim Formatında (GPX) çok sayıda dosyayı yıllara göre sıralamakla görevlendirildim. Dosya sisteminde her yıl için bir klasör olmalı ve o yıl içinde başlayan tüm GPX parçaları bu klasöre yerleştirilmelidir. Dosya adı tarih bilgisi içermiyor.

GPX, XML tabanlıdır ve etikette tarih bilgisi mevcuttur. her ara nokta için arşivlenir. GPX dosyasından bir bölüm örneği:

<?xml version="1.0" encoding="UTF-8"?>
<gpx
version="1.1"
creator="..."
xmlns="http://www.topografix.com/GPX/1/1"
xmlns:topografix="http://www.topografix.com/GPX/Private/TopoGrafix/0/1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.topografix.com/GPX/1/1
http://www.topografix.com/GPX/1/1/gpx.xsd
http://www.topografix.com/GPX/Private/TopoGrafix/0/1
http://www.topografix.com/GPX/Private/TopoGrafix/0/1/topografix.xsd">
<metadata>
<name><![CDATA[...]]></name>
<desc><![CDATA[...]]></desc>
</metadata>
<trk>
<name><![CDATA...]]></name>
<desc><![CDATA[...]]></desc>
<type><![CDATA[...]]></type>
<trkseg>
<trkpt lat="51.356339" lon="6.946994">
<ele>195</ele>
<time>2015-05-02T12:31:01.950Z</time>
</trkpt>
<trkpt lat="51.356379" lon="6.946838">
<ele>172</ele>
<time>2015-05-02T12:31:12.785Z</time>
</trkpt>
...

Windows PowerShell’deki iyi XML desteği sayesinde, görevi PowerShell betik dilinde 10 dakikada çözebildim. Aşağıdaki liste sonucu gösterir. İlk ara nokta, her GPX dosyasında ve kendi dosyasında aranır. etiket oku.

Olumlu bir not olarak, “ISE” PowerShell düzenleyicisi ayrıca XML öğeleri için giriş desteği sunar (şekle bakın), yani dosyanın gerçek yapısına göre ne aranacağını önerir $xml içeri girebilirsin Bununla birlikte, bir XML şema dosyası dahil edilmediğinden, editörün yapı hakkında nasıl bilgi sahibi olduğu sorusu ortaya çıkar. İşin püf noktası, betiği satır başına bir kez çalıştırmaktır. [xml] $gpx = Get-Content $file.FullName çalıştırmak ve ancak bundan sonra komut dosyasını yakalamaya devam etmek. bu değişken $xml Birlikte XmlBelgesi– Obje dolu ve editör önerileri yapabilir.




ISE'de XML zekası



PowerShell ISE’de XML giriş desteği



# Sortieren von GPX-Dateien nach Jahren
# (C) Dr. Holger Schwichtenberg 2016
$ErrorActionPreference = "stop"
$ordner = "t:GPXDateien"
$dateien = dir $ordner -Filter *.gpx

# Schleife über alle Dateien
foreach($datei in $dateien)
{
$datei.Name
# Dateien laden und in XMLDocument umwandeln
[xml] $xml = Get-Content $datei.FullName
# Sonderfall prüfen: Ist die GPX-Datei leer?
if ($xml.gpx.trk.trkseg -eq $null)
{
$jahr = "leer"
}
else
{
# Datum extrahieren
[datetime] $dat = $xml.gpx.trk.trkseg.trkpt[0].time
$jahr = $dat.Year
}

# Jahresordner anlegen
$Jahresordner = $ordner + "" + $jahr
if (-not (Test-Path $Jahresordner)) { md $Jahresordner }

# Datei in den Jahresordner verschieben
Move-Item $datei.FullName $Jahresordner
}






()





Haberin Sonu
 
Üst