Előre bocsá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:
58 . á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.