Parsowanie pliku CSV. Separator w treści komórki.

0

Witam.

Temat pewnie banalny, ale utknąłem i nie mogę ruszyć z miejsca.

Mam plik CSV który chce sparsować do listy obiektów.
Problemem jest to, że w treści pojedynczej komórki może występować separator, ale wtedy taki ciąg zamknięty jest w cudzysłów.
Np:

imie,nazwisko,funkcja
tomasz,nowak,kierowca
karol,wiśniewski,"malarz, akrobata"

Jak najprościej do tego podejść?
Próbowałem wykorzystać bibliotekę CSVHelper, ale też nie przyniosło to rezultatów...

1

Pokaż jak wykorzystujesz CsvHelper, bo ja mam taki sam przypadek i działa :)

0

Z CsvHeloper to w ogóle coś nie gra :)

Mój kod:

var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    Delimiter = ","
};

using (var reader = new StreamReader($@"d:\TEST\test.csv"))
using (var csv = new CsvReader(reader, config))
{
    var records = csv.GetRecords<dynamic>();
}

nie wiem czemu csv jest pusty
screenshot-20220215105405.png

Upewniłem się czy podaje prawidłową ścieżkę do pliku:
screenshot-20220215105559.png

0
hipekk napisał(a):

Witam.

Temat pewnie banalny, ale utknąłem i nie mogę ruszyć z miejsca.

Mam plik CSV który chce sparsować do listy obiektów.
Problemem jest to, że w treści pojedynczej komórki może występować separator, ale wtedy taki ciąg zamknięty jest w cudzysłów.
Np:

imie,nazwisko,funkcja
tomasz,nowak,kierowca
karol,wiśniewski,"malarz, akrobata"

Jak najprościej do tego podejść?
Próbowałem wykorzystać bibliotekę CSVHelper, ale też nie przyniosło to rezultatów...

A co jakbyś miał cudzysłów w wartości? ;)

0

Z ciekawości sprawdziłem co w taki przypadku robi Calc (z pakietu LibreOffice):
Mam arkusz:
screenshot-20220215133631.png

Zapisuje do csv, jako separator mam przecinek, a ogranicznik tekstu cudzysłów
screenshot-20220215133516.png

Wynik:
screenshot-20220215133723.png

0
hipekk napisał(a):

Wynik:
screenshot-20220215133723.png

No to jeszcze sprawdź co zrobi jak wpiszesz foo"",""bar i będziemy mieć wszystko :>

1

Gotowe:

imie,nazwisko,funkcja
tomasz,nowak,kierowca
karol,wiśniewski,"malarz, ""kucharz"", akrobata"
4programmers,test,"foo"""",""""bar"
0

No, czyli wychodzi że znak " trzeba zaencodować w "".

0

Nie do końca rozumiem co masz na myśli szczerze mówiąc... :/

Możesz szerzej?

0

Że tak powiem - no u mnie działa :)

screenshot-20220215215817.png

2

Nie mam pojęcia czemu to u mnie nie działa...

Napisałem na szybko swój parser i z głowy ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1