CSV-specifikationen är en som jag tycker är implementerad på många olika sätt... det verkar i grunden som att den bara är halvspecerad vilket är frustrerande med tanke på dess popularitet.
För att inkludera en ny rad i en cell i en CSV kan cellen behöva lindas, eller så kan den nya raden behöva escapes. Du kommer att märka från det länkade dokumentet att det finns tre sätt att göra detta - och olika program behandlar det på olika sätt:
- Excel lindar in hela cellen med dubbla citattecken:en cell kan ha (okodade) nyradstecken inom sig och betraktas som en enda cell, så länge den är inlindad i dubbla citattecken (observera att du också måste använda excel-stil dubbla citattecken i cellinnehållet)
- Andra program infogar ett enstaka snedstreck före tecknet, därför en rad som slutar på
\
betraktas inte som slutet på en rad, utan som ett nyradstecken i cellen. En cell kan ha okodade nyradstecken så länge de föregås av omvänt snedstreck. - Andra ersätter fortfarande en ny rad med C-stil tecken escape, den faktiska teckensekvensen
\n
eller\r\n
. I det här fallet har cellen helt escaped nyradstecken.
Problemet förvärras av det potentiella behovet av att undkomma kontrolltecknen (liksom annat innehåll (t.ex. "
i #1 och \
i #2+3) och olika stilar av escape (t.ex. ett inbäddat citat kan escapes som:dubbelt dubbla citattecken ""
eller omvänt snedstreck-dubbelt citattecken \"
)
Mitt råd :generera ett open-office-dokument med flera rader och key escape-tecken och se hur open-office genererar en CSV
fil. Därifrån kan du bestämma vilken av ovanstående metoder som ska användas för nya rader i celler och vilken escapemetod.
exempel på stil-1 (excel):
#num,str,num
1,"Hello
World",1990
2,"Yes",1991
exempel på stil-2:
#num,str,num
1,Hello \
Word,1990
2,Yes,1991
exempel på stil-3:
#num,str,num
1,Hello \nWorld,1990
2,Yes,1991