Home > Powershell > [PL] #PowerShell i CSV

[PL] #PowerShell i CSV

Ostatnio bardzo często używam ‘potężnej muszli’ wraz z plikami CSV, w których przetrzymuję konfigurację lub też dane wykorzystywane w projekcie. Chciałbym pokrótce podzielić się swoimi spostrzeżeniami i wskazówkami związanymi z pobieraniem danych z CSVki.

Plik CSV jaki jest każdy wie – prosty plik tekstowy, który składa się z wiersza przechowującego nazwy kolumn wraz z N-ką wierszy z danymi. Każda kolumna jest oddzielona znakiem, czy to TABa, średnika czy też przecinka p – mogą być też serduszka, kwiatki czy… . W swoich projektach w tego typu plikach przechowuję przeważnie informacje na temat konfiguracji dla danego BUILDa, czy też po prostu dane. Format ten ma wiele zalet. Jest bardzo łatwo edytowalny w Excelu, pozbywamy się zbędnych tagów XMLa no i bardzo łatwo się tym zarządza w muszli – wada jest taka, że trudno jest zrobić w tym jakieś zagnieżdżenia. Dla przykładu mam sobie taki plik

Name;DeployPath;AssemblyVersion
Debug;C:\Deploy\Debug;1
Release;C:\Deploy\Release;4
Production;C:\Deploy\Prod;3

Wywołując magiczną komendę Import-Csv możemy w bardzo prosty sposób zaimportować tego typu plik i nim zarządzać bezpośrednio z linii poleceń. Jako, że w PS wszystko jest obiektem, nie da się ukryć, że po wywołaniu tej komendy nasz CSV zamienia się z brzydkiego tekstu w piękny obiekt.

Import-Csv .\configuration.csv -Delimiter ';'

Chcąc pobrać jakąś wartość z wiersza czy kolumny należy tylko się do niego dobrać. Jeden ze 101 sposobów wygląda następująco

$line = Import-Csv .\configuration.csv -Delimiter ';' |`
 where { $_.Name -eq "Debug" }

Kolejny krok to dobranie się do komórki wiersza. Znając nazwę kolumny możemy po prostu podać ją po kropce i już mamy jej wartość

$line.DeployPath
$line.AssemblyVersion

Ostatnio miałem także potrzebę pobrania wartości komórki z kolumny, której nazwę znam dopiero w czasie wykonywania skryptu. Trochę zajęło mi buszowanie po sieci (jakoś znaleźć tego nie mogłem), ale proste rzeczy są najskuteczniejsze i okazuje się, że można uzyskać to w następujący sposób – pobierając nazwę kolumny do zmiennej i odwołać się po kropce ze zmiennej z wierszem CSV i już. Prawda, że proste – isn’t it ?

$columnName = Read-Host "What column to use?"
$line.$columnName
Tags: ,
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: