Mam taką linię w moim pliku CSV:
"Samsung U600 24"","10000003409","1","10000003427"
Cudzysłów obok 24
służy do wyrażenia cali, natomiast cudzysłów tuż obok tego cudzysłowu zamyka pole. Czytam wiersz, fgetcsv
ale parser popełnia błąd i odczytuje wartość jako:
Samsung U600 24",10000003409"
Próbowałem wstawić ukośnik odwrotny przed cudzysłowem w calach, ale w nazwie po prostu otrzymuję ukośnik odwrotny:
Samsung U600 24\"
Czy istnieje sposób, aby odpowiednio uciec od tego w CSV, aby wartość była Samsung U600 24"
, czy też muszę to regexować w procesorze?
Odpowiedzi:
Użyj 2 cudzysłowów:
źródło
Nie tylko podwójne cudzysłowy, będziesz potrzebować pojedynczego cudzysłowu (
'
), podwójnego cudzysłowu ("
), ukośnika odwrotnego (\
) i NUL (bajt NULL).Służy
fputcsv()
do pisania ifgetcsv()
czytania, co zadba o wszystko.źródło
fputcsv()
pokazuje, jak możesz użyć,fputcsv()
gdy chcesz wyświetlać w przeglądarce w formacie csv zamiast rzeczywistego pliku.Wiem, że to stary post, ale oto jak go rozwiązałem (wraz z konwersją wartości null na pusty ciąg) w C # przy użyciu metody rozszerzenia.
Utwórz klasę statyczną z czymś podobnym do następującego:
Następnie dla każdego ciągu, który piszesz do CSV, zamiast:
Po prostu zrób:
źródło
Jeśli wartość zawiera przecinek, znak nowego wiersza lub podwójny cudzysłów, ciąg musi być ujęty w podwójne cudzysłowy. Np .: „Znak nowego wiersza w tym polu \ n”.
Możesz użyć poniższego narzędzia online, aby uciec operatorom „” i. https://www.freeformatter.com/csv-escape.html#ad-output
źródło