petek, 1. november 2013

Powershell Import-CSV Export-CSV in slovenščina



Slovenski jezik bo verjetno vedno povtročal težave (in vir zaslužka) računalničarjem. Obdelava Excela v Powershellu, ki je je očitno razvit predvsem za anglosaksonski svet, tako prinaša tradicionalne težave z šumniki, decimalno vejico in podpičji. Pred uvažanjem se prepričamo, da imamo res SLO nastavitev:

(Get-Culture).TextInfo.ListSeparator
;

Začetna CSV datoteka ima vsebino:

cat num.csv
Dat;st;ime
11.3.1963;10,1;Šime
1.2.1930;2,222;Jurček
6.12.1999;3,345;Žan
13.2.2012;122;Jaka


Get-item predpostavlja UTF-8 kodiranje znakov, zato  ni videti težav. Import-CSV pa predpostvlja ASCI znake, zato pride do čudnih znakov in nenavadnega uvoza. Pretvorbo izvedemo zelo enostavno:

cat num.csv > asci.csv

V prvem koraku smo torej rešili problem šumnikov:

import-csv  asci.csv -delimiter ';'|sort ime

Dat                st               ime
---                --               ---
13.2.2012          122              Jaka
1.2.1930           2,222            Jurček
11.3.1963          10,1             Šime
6.12.1999          3,345            Žan

Enako v PS3, ki pa lahko poskrbi za kodiranje in prepoznavanje jezika

Import-CSV asci.csv -useculture -encoding utf8|sort ime

Razvrščanje po datumu in številih pa še vedno ne deluje, zato preoblikujemo podatke:

$OblikaCSV = Import-Csv asci.csv -useculture -encoding utf8 | foreach {
  New-Object PSObject -prop @{
    Dat = [DateTime]::Parse($_.Dat);
    st = [Double]::Parse($_.st);
    ime = $_.ime
  }
}

Zdaj končno lahko izvajamo operacije na vseh stolpcih:

$oblikacsv|sort st -desc|ft * -auto

Dat               ime       st
---               ---       --
13.2.2012 0:00:00 Jaka     122
11.3.1963 0:00:00 Šime    10,1
6.12.1999 0:00:00 Žan    3,345
1.2.1930 0:00:00  Jurček 2,222

$oblikacsv| where { $_.Dat -gt (get-date).AddYears(-2) } 

Dat                                         ime 
---                                         --- 
13.2.2012 0:00:00                           Jaka




Podatke lahko obdelujemo, shranjujemo in prikazujemo:


$oblikacsv| where { $_.Dat -lt (get-date).AddYears(-2) }|export-csv -delimiter ';' -encoding utf8 -notype rezultat.csv

type rezultat.csv

"Dat";"ime";"st"
"11.3.1963 0:00:00";"Šime";"10,1"
"1.2.1930 0:00:00";"Jurček";"2,222"
"6.12.1999 0:00:00";"Žan";"3,345"

$oblikacsv| where { $_.Dat -lt (get-date).AddYears(-2) }|out-gridview

Ni komentarjev:

Objavite komentar