CSV-specifikationen er en, som jeg finder implementeret på mange forskellige måder... det ser dybest set ud til, at den kun er halvspeceret, hvilket er frustrerende i betragtning af dets popularitet.
For at inkludere en ny linje i en celle i en CSV skal cellen muligvis ombrydes, eller den nye linje skal muligvis escapes. Du vil bemærke fra det linkede dokument, at der er tre måder at gøre dette på - og forskellige programmer behandler det forskelligt:
- Excel ombryder hele cellen i dobbelte anførselstegn:en celle kan have (ikke-udviklede) nylinjetegn i sig og betragtes som en enkelt celle, så længe den er pakket ind i dobbelte anførselstegn (bemærk også, at du skal bruge excel-stil dobbelte anførselstegn undslipper i celleindholdet)
- Andre programmer indsætter en enkelt omvendt skråstreg før tegnet, derfor en linje, der ender på
\
betragtes ikke som slutningen af en linje, men som et linjeskifttegn i cellen. En celle kan have unescaped newline-tegn inden for, så længe de er foranstillet af backslash-tegnet. - Andre erstatter stadig en ny linje med escape-tegn i C-stil, den faktiske tegnsekvens
\n
eller\r\n
. I dette tilfælde har cellen helt escapede nylinjetegn.
Problemet forværres af det potentielle behov for at undslippe kontroltegnene (såvel som andet indhold (f.eks. "
i #1, og \
i #2+3) og forskellige escape-stile (f.eks. kan et indlejret citat escapes som:dobbelt dobbelt anførselstegn ""
eller omvendt skråstreg-dobbelt anførselstegn \"
)
Mit råd :generer et open-office-dokument med flere linjer og key escape-tegn og se, hvordan open-office genererer en CSV
fil. Derfra kan du bestemme, hvilken af ovenstående metoder der skal bruges til nye linjer i celler, og hvilken escape-metode.
eksempel på stil-1 (excel):
#num,str,num
1,"Hello
World",1990
2,"Yes",1991
eksempel på stil-2:
#num,str,num
1,Hello \
Word,1990
2,Yes,1991
eksempel på stil-3:
#num,str,num
1,Hello \nWorld,1990
2,Yes,1991