Táblázatok kezelése (Import-Csv, ConvertFrom-Csv, ConvertTo-Csv)

Előrebocsátom, hogy nem Excel fájlok kezeléséről lesz itt szó, hanem olyan szövegfájlokról, amelyek valamilyen elválasztójellel értékeket tartalmaznak. Ilyet elő tudunk állítani a korábban már látott Export-Csv cmdlettel, de természetesen bármilyen más forrásból származó CSV fájlokat és adatokat tudunk ezekkel a cmdletekkel kezelni.

Az Import-Csv , Export-Csv  cmdletek párja a ConvertTo-Csv  és ConvertFrom-Csv  cmdletek, majdnem ugyanolyan a paraméterezésük, csak az első kettő fájlokkal dolgozik, a második kettő meg a memóriában, változókban található adatokkal. A CSV szó szerint „comma separated values”, azaz „vesszővel elválasztott értékek” jelentéssel bír, de szerencsére nem csak vessző, hanem tetszőlegesen megadható elválasztó karakterrel tudnak dolgozni. Nézzünk erre egy példát. Van egy eredetileg vesszőkkel elválasztott fájlunk, szeretnénk kicserélni a vesszőket mondjuk pontosvesszőre:

[3] PS C:\munka> Import-Csv .\futók.txt | ConvertTo-Csv -NoTypeInformation -Del

imiter ";"

"Név";"Idő"

"Béla";"5:12"

"Dezső";"5:37"

"Karcsi";"5:36"

"Marci";"5:49"

"Tódor";"5:25"

"Tibi";"4:45"

"Gabi";"5:18"

"Andris";"4:52"

"Bence";"4:48"

A –NoTypeInformation kapcsolóval nem rak egy extra kezdősort a kimenetre, amely az adatok típusát hivatott volna jelezni.

Ha Microsoft Excel táblázatszerkesztővel készítünk CSV fájlokat, némi gondunk lehet a fájl kódolásával. Nézzük a következő Excel fájlt:

53 . ábra Ékezetes karaktereket tartalmazó Excel fájl

Ha ezt elmentem CSV formában magyar területi beállítások mellett, majd megpróbálom beimportálni, akkor a következőt kapom:

PS C:\> Import-Csv -Path C:\PowerShell\állatok.csv

 

?llat;Db

--------

Cs?kos b?z?sborz;1

?hes sak?l;5

B?bos banka;3

?lyv?s kesely?;6

Sz?r?s s?n;8

B?reg?r;2

Hát nem néz ki valami szépen! Egyrészt az elválasztó karakterem vessző helyett pontosvessző, másrészt az ékezetes karakterek helyett kérdőjelek jelentek meg. Próbáljuk meg Get-Content-el beolvasni a fájlt:

PS C:\> Get-Content -Path C:\PowerShell\állatok.csv

Állat;Db

Csíkos bűzösborz;1

Éhes sakál;5

Búbos banka;3

Ölyvös keselyű;6

Szúrós sün;8

Bőregér;2

Érdekes, a Get-Content sokkal jobban elbánik ezzel. Az egyik lehetőség, hogy akkor folytassuk innen a ConvertFrom-CSV-vel, meghatározva, hogy az elválasztó karakter a pontosvessző:

PS C:\> Get-Content -Path C:\PowerShell\állatok.csv | ConvertFrom-Csv -Delimite

r ";"

 

Állat            Db

-----            --

Csíkos bűzösborz 1

Éhes sakál       5

Búbos banka      3

Ölyvös keselyű   6

Szúrós sün       8

Bőregér          2

        PowerShell 3.0-val kezdődően már közvetlenül az Import-CSV-hez is megadható az -Encoding paraméter, így azzal már lehet közvetlenül is helyesen importálni:

PS C:\> Import-Csv -Path C:\PowerShell\állatok.csv -Delimiter ";" -Encoding Def

ault

 

Állat            Db

-----            --

Csíkos bűzösborz 1

Éhes sakál       5

Búbos banka      3

Ölyvös keselyű   6

Szúrós sün       8

Bőregér          2

Hogy a „Default” kódolás mit is jelent, és hogy az Import-CSV miért nem használja azt ténylegesen, azt nem sikerült kiderítenem.

 



Word To HTML Converter