Ero sivun ”CSV” versioiden välillä

Siirry navigaatioon Siirry hakuun
 
(13 välissä olevaa versiota samalta käyttäjältä ei näytetä)
Rivi 18: Rivi 18:


=== Tiedoston rakenne ja erotinmerkit (DSV) ===
=== Tiedoston rakenne ja erotinmerkit (DSV) ===
CSV on itse asiassa yleisemmin DSV (Delimiter-Separated Values), sillä käytetty erotin voi vaihdella alueittain ja ohjelmistoittain.
Vaikka CSV-lyhenne viittaa pilkkuun, käytetty erotin voi vaihdella alueittain. Formaattiin viitataankin usein yleisemmin nimellä DSV (Delimiter-Separated Values).
 
==== Datan tyyppi ====
CSV on pelkkä tekstitiedostomuoto. Se ei sisällä minkäänlaista metatietoa tai tietoa siitä, onko kentän arvo luku (kokonaisluku tai  desimaaliluku), päivämäärä vai teksti.
 
* Taulukkolaskenta- tai tietokantaohjelmien täytyy arvata datan tyyppi lukuprosessin aikana. Tämä voi aiheuttaa ongelmia jos esimerkiksi päivämäärät (12/01) tulkitaan amerikkalaisittain (1. joulukuuta) eurooppalaisen muodon sijaan (12. tammikuuta) ellei käyttäjä määritä tyyppiä itse tuonnin yhteydessä.
* Nollat: Esimerkiksi tuotenumero, joka alkaa nollalla (00123), voi menettää etunollansa, jos ohjelma tulkitsee sen suoraan kokonaisluvuksi.
 
Tämän vuoksi CSV-tiedostoja tuotaessa on kriittistä, että käyttäjä useimmissa ohjelmissa (kuten [[LibreOffice Calc]]) määrittelee itse, mikä datan tyyppi kuhunkin sarakkeeseen tuodaan, estääkseen virheelliset automaattiset muunnokset.


==== Erotinmerkit ====
==== Erotinmerkit ====
​CSV-standardin (RFC 4180) oletus on pilkku (,), mutta seuraavat erottimet ovat yleisiä:
​CSV-standardin (RFC 4180) oletus on pilkku (,), mutta seuraavat erottimet ovat yleisiä:
* Pilkkua (,) käytetään ensisijaisesti angloamerikkalaisissa järjestelmissä.
* Pilkkua (,) käytetään ensisijaisesti angloamerikkalaisissa järjestelmissä (RFC 4180:n oletus).  
* Puolipistettä (;) käytetään laajalti Suomessa ja monissa muissa Euroopan maissa. Tämä on välttämätöntä, jos arvoissa itsessään käytetään pilkkua (,) desimaalierottimena (esim. 12,34).
* Puolipistettä (;) käytetään laajalti Suomessa ja monissa Euroopan maissa. Tämä on välttämätöntä, kun desimaalierottimena käytetään pilkkua (esim. 4,916) sekaannuksen estämiseksi.
* Tabulaattoria käytettäessä tiedostomuotoa kutsutaan usein [[TSV]]-muodoksi (Tab-Separated Values).
* CSV on usein yleisemmin DSV (Delimiter-Separated Values), jossa erotin voi olla mikä tahansa merkki. Tämä on elintärkeää tiedostojen vaihdossa suomalaisten taulukkolaskentaohjelmien kuten [[LibreOffice Calc]]in kanssa.


==== Rivinvaihdo ====
==== Rivinvaihdo ====
Rivi 36: Rivi 42:
==== Otsikkorivi ====
==== Otsikkorivi ====
​Tiedoston ensimmäinen rivi sisältää useimmiten kenttien nimet eli otsikkorivin (Header Row).
​Tiedoston ensimmäinen rivi sisältää useimmiten kenttien nimet eli otsikkorivin (Header Row).
<syntaxhighlight lang="CSV">
Vuosi;Merkki;Malli;Pituus
1994;Audi;A6;"4,916"
2001;Honda;Civic;"4,545"
</syntaxhighlight>
(Huomaa, että 4,916 on ympäröity lainausmerkeillä, koska se sisältää erottimen kaltaisen pilkun.)
==== Lainausmerkit ja erikoismerkit ====
==== Lainausmerkit ja erikoismerkit ====
​CSV-formaatti käyttää lainausmerkkejä merkkijonojen ja erikoismerkkien käsittelyyn.
​CSV-formaatti käyttää lainausmerkkejä (") merkkijonojen ja erikoismerkkien käsittelyyn.


* Arvon ympäröiminen: Jos kentän arvo sisältää:
===== Lainausmerkeillä ympäröinti =====
* erotinmerkin (esim. ; tai ,),
* Jos kentän arvo sisältää erotinmerkin, rivinvaihdon tai lainausmerkin, koko arvo on ympäröitävä lainausmerkeillä (").
* rivinvaihdon, tai
* lainausmerkin ("), on koko arvo ympäröitävä lainausmerkeillä (").
​* Lainausmerkin escapointi: Jos lainausmerkeillä ympäröity arvo sisältää itsessään lainausmerkin, on se escapoitava (escaping) eli esitettävä kahdella peräkkäisellä lainausmerkillä ("").


===== Lainausmerkin Escapointi =====
* Jos lainausmerkeillä ympäröity arvo sisältää itsessään lainausmerkin, se on escapoitava eli esitettävä kahdella peräkkäisellä lainausmerkillä ("").


{| class="wikitable sortable"
{| class="wikitable sortable"
Rivi 52: Rivi 65:
! Arvo (sellaisenaan) !! CSV-muotoon kirjoitettuna !! Selitys
! Arvo (sellaisenaan) !! CSV-muotoon kirjoitettuna !! Selitys
|-
|-
| Audi; A6 || "Audi; A6" || Erotin (;) on arvon sisällä.
| Audi "A6" || "Audi ""A6""" || Arvon sisällä oleva lainausmerkki (") muutetaan kahdeksi lainausmerkiksi (""). Koko arvo ympäröidään lainausmerkeillä.
|-
| "Hieno" auto || """Hieno"" auto" || Lainausmerkit arvon sisällä escapoidaan ("").
|}
 
Esimerkki .csv-tiedoston sisällyksestä.
<syntaxhighlight lang="CSV">
Vuosi,Merkki,Malli,Pituus
1994,Audi,A6,"4,916"
2001,Honda,Civic,"4,545"
2006,Volkswagen,Golf IV,"4,397"
</syntaxhighlight>
 
Jonka tulostus olisi tämän tyylinen.
{|class="toccolours" style="margin:auto" width=100%
|-
|Vuosi||Merkki||Malli||Pituus
|-
|1994||Audi||A6||4,916
|-
|2001||Honda||Civic||4,545
|-
|-
|2006||Volkswagen||Golf IV||4,397
| Raportti; "Kevät" || "Raportti; ""Kevät""" || Sisältää erottimen (;) ja lainausmerkin. Molempien sääntöjen on täytyttävä.
|}
|}


Rivi 89: Rivi 82:
|+
|+
|-
|-
! Työkalu !! Kuvaus !! Puolipisteen käyttö
! Työkalu !! Kuvaus !! Erotin (:)-esimerkki
|-
|-
| ''[[awk]]'' || Yleinen tekstitiedoston prosessointikieli. Erinomainen rivien suodattamiseen ja muokkaamiseen. || -F ';' asettaa puolipisteen erotinmerkiksi.
| ''[[awk|GNU awk]]'' || Yleinen tekstitiedoston prosessointikieli. Erinomainen rivien suodattamiseen ja muokkaamiseen. || awk -F ';' '{ print $1 }'
|-
|-
| ''[[cut]]'' || Leikkaa sarakkeita tiedostosta. || -d ';' asettaa puolipisteen erotinmerkiksi.
| ''[[cut]]'' || Leikkaa sarakkeita tiedostosta. || cut -d ';' -f 2,4
|-
|-
| ''[[csvkit]]'' || (Paketti) Kokoelma Pythonilla kirjoitettuja työkaluja (esim. ''csvcut'', ''csvstat''). Tarjoaa SQL-tyyppisiä toimintoja. || -d ';' asettaa erotinmerkin, tukee sarakkeiden käsittelyä nimellä.
| ''[[csvkit]]'' || (Paketti) Kokoelma Pythonilla kirjoitettuja työkaluja (esim. ''csvcut'', ''csvstat''). Tarjoaa SQL-tyyppisiä toimintoja. || csvcut -d ';' -c Malli tiedosto.csv
|-
|-
| ''[[mlr]]'' (Miller) || Monipuolinen työkalu, joka ymmärtää sarakkeiden nimet (kuten SQL). Korvaa monessa suhteessa ''[[awk]]'', ''[[cut]]'', ja ''[[sort]]''-komennot. || --ifs ';' (Input Field Separator) määrittää puolipisteen.
| ''[[mlr]]'' (Miller) || Tehokas työkalu, joka käsittelee CSV/TSV/JSON-muotoja ja ymmärtää sarakkeiden nimet. Korvaa monessa suhteessa ''[[awk]]'', ''[[cut]]'', ja ''[[sort]]''-komennot. || mlr --ifs ';' cut -f Vuosi,Malli tiedosto.csv
|}
|}


Noudettu kohteesta ”https://www.linux.fi/wiki/CSV