specyfikacja CSV to taki, który zaimplementowałem na wiele różnych sposobów... wygląda na to, że jest tylko w połowie określony, co jest frustrujące, biorąc pod uwagę jego popularność.
Aby dołączyć nową linię do komórki w CSV, może być konieczne zawinięcie tej komórki lub może być konieczne ominięcie nowej linii. W załączonym dokumencie zauważysz, że można to zrobić na trzy sposoby – a różne programy traktują to w różny sposób:
- Excel otacza całą komórkę podwójnymi cudzysłowami:komórka może zawierać (bez ucieczki) znaki nowej linii i być uważana za pojedynczą komórkę, o ile jest otoczona podwójnymi cudzysłowami (pamiętaj też, że musisz użyć stylu Excela podwójny cudzysłów w treści komórki)
- Inne programy wstawiają pojedynczy ukośnik odwrotny przed znakiem, dlatego wiersz kończący się na
\
nie jest uważany za koniec wiersza, ale za znak nowego wiersza w komórce. Komórka może zawierać znaki nowej linii bez zmiany znaczenia, o ile są poprzedzone znakiem odwrotnego ukośnika. - Inne nadal zastępują znak nowej linii znakiem ucieczki w stylu C, rzeczywista sekwencja znaków
\n
lub\r\n
. W tym przypadku komórka ma całkowicie pominięte znaki nowej linii.
Problem jest spotęgowany potencjalną potrzebą ucieczki znaków kontrolnych (jak również innej zawartości (np. "
w #1 i \
w #2+3) i różne style ucieczki (np. osadzony cytat może zostać zmieniony jako:podwójny podwójny cudzysłów ""
lub podwójny cudzysłów odwrotny ukośnik \"
)
Moja rada :wygeneruj dokument otwartego biura z wieloma wierszami i kluczowymi znakami ucieczki i zobacz, jak open-office generuje CSV
plik. Stamtąd możesz zdecydować, której z powyższych metod użyć dla nowych wierszy w komórkach i która metoda ucieczki.
przykład stylu 1 (excel):
#num,str,num
1,"Hello
World",1990
2,"Yes",1991
przykład stylu-2:
#num,str,num
1,Hello \
Word,1990
2,Yes,1991
przykład stylu-3:
#num,str,num
1,Hello \nWorld,1990
2,Yes,1991