Kommaseparerede værdier - Comma-separated values

Kommaseparerede værdier
CsvDelimited001.svg
Filnavn udvidelse .csv
Internetmedietype text/csv
Første udgivelse Ukendt
informations -RFC oktober 2005
Type format multi-platform, serielle datastrømme
Beholder til databaseoplysninger organiseret som feltseparerede lister
Standard RFC 4180

En kommaseparerede værdier ( CSV ) -fil er en afgrænset tekstfil, der bruger et komma til at adskille værdier. Hver linje i filen er en datarekord . Hver post består af et eller flere felter adskilt af kommaer. Anvendelsen af ​​kommaet som en feltseparator er kilden til navnet på dette filformat . En CSV-fil gemmer typisk tabelform data (tal og tekst) i almindelig tekst , i hvilket tilfælde hver linje vil have det samme antal felter.

CSV -filformatet er ikke fuldstændigt standardiseret. Adskillelse af felter med kommaer er grundlaget, men kommaer i data eller indlejrede linjeskift skal håndteres specielt. Nogle implementeringer tillader ikke sådant indhold, mens andre omgiver feltet med anførselstegn , hvilket igen skaber behov for at undslippe disse, hvis de er til stede i dataene.

Udtrykket "CSV" betegner også flere nært beslægtede afgrænsningsseparerede formater, der bruger andre feltafgrænsere såsom semikolon. Disse inkluderer værdier, der er adskilt fra faner og værdier, der er adskilt fra mellemrum. En afgrænser, der garanteret ikke er en del af dataene, forenkler i høj grad parsing .

Alternative afgrænsningsseparerede filer får ofte en .csv- udvidelse på trods af brugen af ​​en ikke-komma-feltseparator. Denne løse terminologi kan forårsage problemer i dataudveksling . Mange applikationer, der accepterer CSV -filer, har muligheder for at vælge skilletegn og citattegn. Semikolon bruges ofte i stedet for kommaer i mange europæiske lokaliteter for at bruge kommaet som decimalseparator og muligvis perioden som decimalgrupperingstegn. På grund af det foreslås udtrykket tegnseparerede værdier som en bredere definition af dette filformat.

Dataudveksling

CSV er et almindeligt dataudvekslingsformat , der i vid udstrækning understøttes af forbrugere, virksomheder og videnskabelige applikationer. Blandt de mest almindelige anvendelser er at flytte tabulære data mellem programmer, der indbygget fungerer på inkompatible (ofte proprietære eller udokumenterede) formater. Dette fungerer på trods af manglende overholdelse af RFC 4180 (eller enhver anden standard), fordi så mange programmer understøtter variationer i CSV -formatet til dataimport.

For eksempel kan en bruger muligvis overføre oplysninger fra et databaseprogram, der gemmer data i et proprietært format, til et regneark, der bruger et helt andet format. De fleste databaseprogrammer kan eksportere data som CSV, og den eksporterede CSV -fil kan derefter importeres af regnearksprogrammet.

Specifikation

RFC  4180 foreslår en specifikation for CSV -formatet; faktisk praksis følger imidlertid ofte ikke RFC, og udtrykket "CSV" kan referere til en fil, der:

  1. er ren tekst ved hjælp af et tegnsæt som ASCII , forskellige Unicode-tegnsæt (f.eks. UTF-8), EBCDIC eller Shift JIS ,
  2. består af poster (typisk en post pr. linje),
  3. med registreringerne opdelt i felter adskilt af afgrænsere (typisk et enkelt reserveret tegn, f.eks. komma, semikolon eller fane; nogle gange kan skilletegnene indeholde valgfrie mellemrum),
  4. hvor hver post har den samme sekvens af felter.

Inden for disse generelle begrænsninger er der mange variationer i brug. Derfor er en fil, der hævdes simpelthen i "CSV" -format, ikke fuldstændigt specificeret uden yderligere oplysninger (f.eks. Om RFC 4180 er overholdt). Som følge heraf giver mange applikationer, der understøtter CSV -filer, brugerne mulighed for at få vist de første få linjer i filen og derefter angive afgrænsningstegn (er), citeringsregler osv. Hvis en bestemt CSV -fils variationer falder uden for, hvad et bestemt modtagelsesprogram understøtter, det er ofte muligt at undersøge og redigere filen i hånden (dvs. med en tekstredigerer ) eller skrive et script eller et program for at producere et konform format.

Historie

Kommaseparerede værdier er et dataformat, der foruddaterer personlige computere med mere end et årti: IBM Fortran (niveau H udvidet) compiler under OS/360 understøttet CSV i 1972. Liste-dirigeret ("fri form") input/output blev defineret i FORTRAN 77 , godkendt i 1978. Liste-styret input brugte kommaer eller mellemrum for afgrænsere, så ikke-citerede tegnstrenge kunne ikke indeholde kommaer eller mellemrum.

Begrebet "komma-adskilt værdi" og "CSV" -forkortelse var i brug i 1983. Manualen til Osborne Executive-computeren, der fulgte SuperCalc- regnearket, dokumenterer CSV-citatkonventionen, der tillader strenge at indeholde integrerede kommaer, men manualen gør det ikke angive en konvention for at integrere anførselstegn i citerede strenge.

Kommaseparerede værdilister er lettere at skrive (f.eks. I hullede kort ) end faste kolonnejusterede data og var mindre tilbøjelige til at producere forkerte resultater, hvis en værdi blev udstanset en kolonne fra den påtænkte placering.

Kommaseparerede filer bruges til udveksling af databaseoplysninger mellem maskiner fra to forskellige arkitekturer. Almindelig teksttegn i CSV-filer undgår stort set inkompatibiliteter såsom byte-rækkefølge og ordstørrelse . Filerne er stort set læsbare for mennesker, så det er lettere at håndtere dem i mangel af perfekt dokumentation eller kommunikation.

Det vigtigste standardiseringsinitiativ - omdannelse af " de facto fuzzy definition" til en mere præcis og de jure - var i 2005 med RFC  4180 , der definerede CSV som en MIME -indholdstype . Senere, i 2013, blev nogle af RFC 4180's mangler afhjulpet af en W3C -anbefaling.

I 2014 offentliggjorde IETF RFC  7111, der beskriver anvendelse af URI -fragmenter på CSV -dokumenter. RFC 7111 angiver, hvordan række-, kolonne- og celleområder kan vælges fra et CSV -dokument ved hjælp af positionsindekser.

I 2015 offentliggjorde W3C , i et forsøg på at forbedre CSV med formel semantik , de første udkast til anbefalinger til CSV-metadata-standarder, der begyndte som anbefalinger i december samme år.

Generel funktionalitet

CSV -formater bruges bedst til at repræsentere sæt eller sekvenser af poster, hvor hver post har en identisk liste over felter. Dette svarer til en enkelt relation i en relationsdatabase eller til data (dog ikke beregninger) i et typisk regneark.

Formatet går tilbage til de tidlige dage af business computing og bruges i vid udstrækning til at videregive data mellem computere med forskellige interne ordstørrelser, behov for dataformatering og så videre. Af denne grund er CSV -filer almindelige på alle computerplatforme.

CSV er en afgrænset tekstfil, der bruger et komma til at adskille værdier (mange implementeringer af CSV -import-/eksportværktøjer gør det muligt at bruge andre separatorer, f.eks. Brugen af ​​en "Sep =^" -række som den første række i *. csv -fil får Excel til at åbne filen og forventer, at caret "^" er separatoren i stedet for komma ","). Enkle CSV -implementeringer kan forbyde feltværdier, der indeholder komma eller andre specialtegn, f.eks. Nye linjer. Mere sofistikerede CSV -implementeringer tillader dem, ofte ved at kræve "( dobbelt citat ) tegn omkring værdier, der indeholder reserverede tegn (f.eks. Kommaer, dobbelte anførselstegn eller mindre almindeligt, nye linjer). Indlejrede dobbelt citattegn kan derefter repræsenteres af et par på hinanden følgende par dobbelte citater, eller ved at præfiksere et dobbelt citat med en flugttegn som f.eks. en omvendt skråstreg (f.eks. i Sybase Central).

CSV -formater er ikke begrænset til et bestemt tegnsæt . De fungerer lige så godt med Unicode- tegnsæt (f.eks. UTF-8 eller UTF-16 ) som med ASCII (selvom særlige programmer, der understøtter CSV, kan have deres egne begrænsninger). CSV -filer vil normalt endda overleve naiv oversættelse fra et tegnsæt til et andet (i modsætning til næsten alle proprietære dataformater). CSV giver imidlertid ikke nogen måde at angive, hvilket tegnsæt der er i brug, så det skal kommunikeres separat eller bestemmes i den modtagende ende (hvis det er muligt).

Databaser, der indeholder flere relationer, kan ikke eksporteres som en enkelt CSV -fil. På samme måde kan CSV ikke naturligt repræsentere hierarkiske eller objektorienterede data. Det skyldes, at hver CSV -post forventes at have den samme struktur. CSV er derfor sjældent egnet til dokumenter, der er oprettet med HTML , XML eller andre markup- eller tekstbehandlingsteknologier.

Statistiske databaser på forskellige felter har ofte en generelt relationslignende struktur, men med nogle grupper, der kan gentages. For eksempel gentager sundhedsdatabaser som demografisk og sundhedsundersøgelse typisk nogle spørgsmål for hvert barn af en given forælder (måske op til et fast maksimalt antal børn). Statistiske analysesystemer inkluderer ofte værktøjer, der kan "rotere" sådanne data; for eksempel kan en "forælder" -post, der indeholder oplysninger om fem børn, opdeles i fem separate poster, der hver indeholder (a) oplysningerne om et barn og (b) en kopi af alle de ikke-barnspecifikke oplysninger. CSV kan repræsentere enten den "lodrette" eller "vandrette" form for sådanne data.

I en relationsdatabase håndteres lignende problemer let ved at oprette en separat relation for hver sådan gruppe og forbinde "underordnede" poster med de relaterede "forælder" -poster ved hjælp af en fremmed nøgle (f.eks. Et ID -nummer eller navn til forælderen). På markeringssprog som XML er sådanne grupper typisk indkapslet i et overordnet element og gentages efter behov (f.eks. Flere <child>noder inden for en enkelt <parent>node). Med CSV er der ingen almindeligt accepteret enkeltfil-løsning.

Software og række grænser

Hver software, der arbejder med CSV, har sine grænser for det maksimale antal rækker, CSV -filer kan have. Nedenfor er en liste over almindelig software og dens begrænsninger:

  • Microsoft Excel: 1.048.576 rækkegrænse
  • Apple -numre: 1.000.000 rækker
  • Google Sheets: 5.000.000 cellegrænse (produktet af kolonner og rækker)
  • OpenOffice og LibreOffice: 1.048.576 rækkegrænse
  • Teksteditorer (f.eks. WordPad, TextEdit, Vim osv.): Ingen række- eller cellegrænse

Standardisering

Navnet "CSV" angiver brugen af ​​kommaet til at adskille datafelter. Ikke desto mindre bruges udtrykket "CSV" i vid udstrækning til at referere til en stor familie af formater, der adskiller sig på mange måder. Nogle implementeringer tillader eller kræver enkelt eller dobbelt anførselstegn omkring nogle eller alle felter; og nogle reserverer den første post som et overskrift, der indeholder en liste over feltnavne. Tegnsættet, der bruges, er udefineret: Nogle applikationer kræver et Unicode- byteordremærke (BOM) for at håndhæve Unicode-fortolkning (nogle gange endda en UTF-8 BOM). Filer, der bruger fanebladet i stedet for komma, kan mere præcist kaldes "TSV" for faneadskillede værdier.

Andre forskelle i implementeringen omfatter håndtering af mere almindelige feltseparatorer (f.eks. Mellemrum eller semikolon) og nylinjetegn i tekstfelter. En anden subtilitet er fortolkningen af ​​en tom linje: den kan ligeledes være resultatet af at skrive en registrering med nul felter eller en registrering af et felt med nul længde; dermed afkodning det er tvetydigt.

OKI friktionsfri tabell datapakke

I 2011 oprettede Open Knowledge Foundation (OKF) og forskellige partnere en arbejdsgruppe for dataprotokoller, som senere udviklede sig til Frictionless Data -initiativet. Et af de vigtigste formater, de frigav, var Tabular Data Package. Tabulær datapakke var stærkt baseret på CSV og brugte den som hoveddatatransportformat og tilføjede grundlæggende type- og skema -metadata (CSV mangler nogen typeinformation for at skelne strengen "1" fra tallet 1).

Frictionless Data Initiative har også leveret et standard CSV -dialektbeskrivelsesformat til beskrivelse af forskellige dialekter af CSV, f.eks. Angivelse af feltseparatoren eller citeringsregler.

Internet W3C tabelstandarddatastandard

I 2013 begyndte W3C "CSV on the Web" arbejdsgruppen at specificere teknologier, der giver en højere interoperabilitet for webapplikationer, der bruger CSV eller lignende formater. Arbejdsgruppen afsluttede sit arbejde i februar 2016 og er officielt lukket i marts 2016 med frigivelse af et sæt dokumenter og W3C -anbefalinger til modellering af "Tabular Data" og forbedring af CSV med metadata og semantik .

RFC 4180 standard

Den tekniske standard fra 2005 RFC 4180 formaliserer CSV-filformatet og definerer MIME-typen "tekst/csv" til håndtering af tekstbaserede felter. Fortolkningen af ​​teksten i hvert felt er dog stadig applikationsspecifik. Filer, der følger RFC 4180 -standarden, kan forenkle CSV -udveksling og bør være bredt bærbare. Blandt dens krav:

  • Linjer i MS-DOS-stil, der slutter med (CR/LF) tegn (valgfri for den sidste linje).
  • En valgfri overskriftspost (der er ingen sikker måde at registrere, om den er til stede, så forsigtighed er påkrævet ved import).
  • Hver post skal indeholde det samme antal kommaseparerede felter.
  • Ethvert felt kan citeres (med dobbelt anførselstegn).
  • Felter, der indeholder et linjeskift, dobbelt-citat eller kommaer, bør anføres. (Hvis de ikke er det, vil filen sandsynligvis være umulig at behandle korrekt.)
  • Hvis der anvendes dobbelte anførselstegn til at skjule felter, så en dobbelt-citat i et felt , skal være repræsenteret af to dobbelt-citationstegn.

Formatet kan behandles af de fleste programmer, der hævder at læse CSV -filer. Undtagelserne er (a) programmer understøtter muligvis ikke linjeskift inden for citerede felter, (b) programmer kan forveksle den valgfrie overskrift med data eller tolke den første datalinje som en valgfri overskrift, og (c) dobbelt anførselstegn i et felt må ikke være analyseres korrekt automatisk.

Grundlæggende regler

Der findes mange uformelle dokumenter, der beskriver "CSV" -formater. IETF RFC 4180 (opsummeret ovenfor) definerer formatet for "tekst/csv" MIME -typen, der er registreret hos IANA .

Regler, der er typiske for disse og andre "CSV" -specifikationer og implementeringer, er som følger:

  • CSV er et afgrænset dataformat, der har felter/kolonner adskilt af komma -tegnet og poster/rækker afsluttet med nye linjer.
  • En CSV-fil kræver ikke en bestemt tegnkodning , byteordre eller linietermineringsformat (noget software understøtter ikke alle line-end variationer).
  • En rekord slutter ved en linieterminator. Linjeterminatorer kan imidlertid integreres som data i felter, så software skal genkende citerede linjeseparatorer (se nedenfor) for korrekt at kunne samle en hel post fra måske flere linjer.
  • Alle poster skal have samme antal felter i samme rækkefølge.
  • Data i felter tolkes som en sekvens af tegn , ikke som en sekvens af bits eller bytes (se RFC 2046, afsnit 4.1). F.eks. Kan den numeriske mængde 65535 repræsenteres som de 5 ASCII -tegn "65535" (eller måske andre former, såsom "0xFFFF", "000065535.000E+00" osv.); men ikke som en sekvens på 2 bytes beregnet til at blive behandlet som et enkelt binært heltal frem for som to tegn (f.eks. har tallene 11264–11519 et komma som deres byte i høj orden :). Hvis denne "almindelige tekst" -konvention ikke følges, indeholder CSV -filen ikke længere tilstrækkelige oplysninger til at tolke den korrekt, CSV -filen vil sandsynligvis ikke overleve transmission på tværs af forskellige computerarkitekturer og vil ikke være i overensstemmelse med tekst-/csv -MIME -typen.ord(',')*256..ord(',')*256+255
  • Tilstødende felter skal adskilles med et enkelt komma. Imidlertid varierer "CSV" -formater meget i dette valg af skilletegn. Især i lokaliteter, hvor kommaet bruges som decimalseparator, bruges i stedet semikolon, TAB eller andre tegn.
    1997,Ford,E350
  • Et hvilket som helst felt kan være anført (dvs. indeholdt i dobbelte anførselstegn), mens nogle felter skal anføres som angivet i følgende regler og eksempler:
    "1997","Ford","E350"
  • Felter med indlejrede kommaer eller dobbelte anførselstegn skal anføres.
    1997,Ford,E350,"Super, luxurious truck"
  • Hvert af de integrerede dobbeltcitattegn skal repræsenteres af et par dobbeltcitattegn.
    1997,Ford,E350,"Super, ""luxurious"" truck"
  • Felter med integrerede linjeskift skal citeres (mange CSV -implementeringer understøtter dog ikke integrerede linjeskift).
    1997,Ford,E350,"Go get one now
    they are going fast"
    
  • I nogle CSV -implementeringer trimmes førende og efterfølgende mellemrum og faner (ignoreres). Sådan trimning er forbudt af RFC 4180, der siger "Mellemrum betragtes som en del af et felt og bør ikke ignoreres."
    1997, Ford, E350
    not same as
    1997,Ford,E350
    
  • Ifølge RFC 4180 er mellemrum uden for citater i et felt ikke tilladt; RFC siger imidlertid også, at "mellemrum betragtes som en del af et felt og bør ikke ignoreres." og "Implementører bør 'være konservative i det, du gør, være liberale i, hvad du accepterer fra andre' (RFC 793, afsnit 2.10), når de behandler CSV -filer."
    1997, "Ford" ,E350
  • I CSV -implementeringer, der trimmer førende eller efterfølgende mellemrum, skal felter med sådanne mellemrum som meningsfulde data citeres.
    1997,Ford,E350," Super luxurious truck "
  • Dobbelt tilbud på behandling behøver kun at gælde, hvis feltet starter med et dobbelt tilbud. Bemærk dog, at dobbelte citater ikke er tilladt i ikke -citerede felter i henhold til RFC 4180.
    Los Angeles,34°03′N,118°15′W
    New York City,40°42′46″N,74°00′21″W
    Paris,48°51′24″N,2°21′03″E
    
  • Den første post kan være et "header", som indeholder kolonnenavne i hvert af felterne (der er ingen pålidelig måde at se, om en fil gør dette eller ej; det er dog ualmindeligt at bruge andre tegn end bogstaver, cifre og understreger i sådanne kolonnenavne).
    Year,Make,Model
    1997,Ford,E350
    2000,Mercury,Cougar
    

Eksempel

År Lave Model Beskrivelse Pris
1997 Ford E350 ac, abs, måne 3000,00
1999 Chevy Venture "Extended Edition" 4900,00
1999 Chevy Venture "Extended Edition, Very Large" 5000,00
1996 Jeep Grand Cherokee SKAL SÆLGES!
luft, månetag, lastet
4799,00

Ovenstående datatabel kan repræsenteres i CSV -format som følger:

Year,Make,Model,Description,Price
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00
1999,Chevy,"Venture ""Extended Edition, Very Large""",,5000.00
1996,Jeep,Grand Cherokee,"MUST SELL!
air, moon roof, loaded",4799.00

Eksempel på en USA/UK CSV -fil (hvor decimalseparatoren er et punktum/punktum og værdiseparatoren er et komma):

Year,Make,Model,Length
1997,Ford,E350,2.35
2000,Mercury,Cougar,2.38

Eksempel på en analog europæisk CSV/ DSV -fil (hvor decimalseparatoren er et komma, og værdiseparatoren er et semikolon):

Year;Make;Model;Length
1997;Ford;E350;2,35
2000;Mercury;Cougar;2,38

Sidstnævnte format er ikke RFC 4180 -kompatibelt. Overensstemmelse kan opnås ved brug af et komma i stedet for et semikolon som separator og enten den internationale notation for repræsentationen af decimaltegnet eller praksis med at citere alle tal, der har et decimaltegn.

Support til applikationer

CSV -filformatet understøttes af næsten alle regneark og databasesystemer, herunder Apple Numbers , LibreOffice Calc og Apache OpenOffice Calc. Microsoft Excel understøtter også CSV, men med begrænsninger i sammenligning med anden regnearkssoftware (f.eks. Fra og med 2019 kan Excel stadig ikke eksportere CSV-filer i den almindeligt anvendte UTF-8-tegnkodning).

CSV -format understøttes af biblioteker, der er tilgængelige til mange programmeringssprog . De fleste giver en eller anden måde at angive feltafgrænsningen, decimalseparatoren , tegnkodning, citationskonventioner, datoformat osv.

Den emacs redaktør kan operere på CSV-filer ved hjælp af CSV-nav tilstand.

Mange hjælpeprogrammer på Unix -stil -systemer (såsom klip , indsæt , sammenføj , sorter , uniq , awk ) kan opdele filer på en kommaafgrænser og kan derfor behandle simple CSV -filer. Denne metode håndterer imidlertid ikke kommaer korrekt inden for citerede strenge.

Se også

Referencer

Yderligere læsning