Import-Csv în PowerShell

Formatare și conversie Windows PowerShell 1.0

Citește un fișier CSV și creează câte un obiect pentru fiecare rând, cu proprietăți numite după coloanele din antet.

Sintaxă
Import-Csv [-Path] <string[]> [[-Delimiter] <char>] [-Header <string[]>] [-Encoding <Encoding>]
Import-Csv [-Path] <string[]> -UseCulture [-Header <string[]>]

Ce face Import-Csv

Import-Csv (alias ipcsv) transformă fiecare rând într-un PSCustomObject: primul rând dă numele proprietăților, iar celelalte rânduri dau valorile. Rezultatul se poate filtra, sorta și grupa imediat, ca orice obiecte.

Toate valorile sunt șiruri de caractere, inclusiv numerele și datele. De aceea, în tabel apar aliniate la stânga, iar comparațiile și sortările numerice cer conversie: [int]$_.Nota, [decimal]$_.Pret.

Separatorul implicit este virgula; pentru fișiere cu ; folosește -Delimiter ';' sau -UseCulture. -Header dă nume coloanelor când fișierul nu are antet. Codificarea implicită în PowerShell 7 este utf8NoBOM; dacă un antet are o coloană goală, PowerShell o numește H1, H2… și afișează un avertisment.

Parametri

Parametru Descriere
-Path Fișierul (sau fișierele) CSV citite.
-Delimiter Separatorul de coloane; implicit virgula.
-UseCulture Folosește separatorul de listă al culturii curente.
-Header Numele coloanelor, pentru fișiere fără rând de antet.
-Encoding Codificarea fișierului; implicit utf8NoBOM în PowerShell 7.
-LiteralPath Calea folosită exact cum e scrisă, fără wildcard-uri.

Ce returnează

Obiecte PSCustomObject, unul pentru fiecare rând, cu valori de tip string.

Exemple

Exemplul 1: Citirea unui fișier CSV

Nota e text, așa că apare aliniată la stânga, nu la dreapta ca un număr.

Set-Content -Path .\note.csv -Value 'Nume,Oras,Nota', 'Ana,Iași,9', 'Mihai,Cluj,7', 'Ioana,Iași,10'
Import-Csv -Path .\note.csv

Ieșire în terminal

Nume  Oras Nota
----  ---- ----
Ana   Iași 9
Mihai Cluj 7
Ioana Iași 10

Exemplul 2: Sortare corectă a valorilor numerice

Fără conversie, „10” ajunge înaintea lui „7”; cu [int] ordinea este cea numerică.

Set-Content -Path .\note.csv -Value 'Nume,Oras,Nota', 'Ana,Iași,9', 'Mihai,Cluj,7', 'Ioana,Iași,10'
$note = Import-Csv -Path .\note.csv
($note | Sort-Object Nota).Nume -join ', '
($note | Sort-Object { [int]$_.Nota }).Nume -join ', '

Ieșire în terminal

Ioana, Mihai, Ana
Mihai, Ana, Ioana

Exemplul 3: Fișier cu ; și fără antet

Numele coloanelor vin din -Header.

Set-Content -Path .\comenzi.csv -Value 'Ana;Cafea;25', 'Mihai;Ceai;12'
Import-Csv -Path .\comenzi.csv -Delimiter ';' -Header 'Client', 'Produs', 'Pret'

Ieșire în terminal

Client Produs Pret
------ ------ ----
Ana    Cafea  25
Mihai  Ceai   12

Greșeli frecvente

  • Comparații cu numere pe valori text: Where-Object { $_.Nota -gt 9 } compară șiruri, așa că '10' nu e mai mare decât 9. Convertește: { [int]$_.Nota -gt 9 }.
  • Separator greșit: un fișier cu ; citit fără -Delimiter ';' dă obiecte cu o singură proprietate, al cărei nume este tot antetul (de exemplu Nume;Oras;Nota).
  • -Header pe un fișier care are deja antet: primul rând devine și el un obiect de date. Folosește -Header doar pentru fișiere fără antet.
  • În Windows PowerShell 5.1, un CSV UTF-8 fără BOM poate apărea cu diacritice stricate; adaugă -Encoding UTF8.

Comenzi înrudite

  • Export-Csv: Salvează obiectele într-un fișier CSV: un rând de antet cu numele proprietăților și câte un rând pentru fiecare obiect.
  • Where-Object: Filtrează obiectele din pipeline și le lasă să treacă doar pe cele care îndeplinesc o condiție.
  • Sort-Object: Sortează obiectele după una sau mai multe proprietăți, crescător sau descrescător, opțional doar primele N.
  • Get-Content: Citește conținutul unui fișier ca listă de linii (sau ca un singur șir cu -Raw); poate afișa primele sau ultimele linii și urmări un log.
  • Measure-Object: Numără obiectele și calculează suma, media, minimul și maximul unei proprietăți, sau numără rândurile, cuvintele și caracterele unui text.