zapis do pliku csv

0

Mam problem z zapisem do pliku csv. Mam zdeklarowaną tablicę 2 wymiarową D[x][y] i chciałbym aby zapis odbywał się w ten sposób kolumna x wiersz y, czyli np. wartość D[2][10] zostanie zapisana do kolumny B wiersz 10 itd. Z jakiej biblioteki i jak to najłatwiej zrobić? Z góry bardzo dziękuję za pomoc!

2

@lifo:

wydrukować pazurek, daną, pazurek, przecinek.
w dwóch pętlach
Za trudne ?

Szczerze, to nie pachniesz mi jakbyś cokolwiek w życiu samodzielnie napisał.

1

Zacznij od tego, żeby te dane wyswietlić na ekranie w formacie csv.

A potem tylko podmień cout na strumień reprezentujący plik.

0

Ja wiem jak się zapisuje, pętle itd. chodzi mi o jakiś przykład oraz najlepszą bibliotekę dla csv- cały czas operuję na fprintf dla txt lub poprzez ofstream dla bin ale w ten sposób csv coś się sypie :(

1

Nie kojarzę żadnej biblioteki do zapisu CSV, bo też i żadna nie jest potrzebna, poza biblioteką standardową. Jak piszesz w C++, to jak najbardziej coutofstream Ci wystarczą — tylko pamiętaj, że CSV to zapis tekstowy, nie binarny.

Jeśli dalej Ci się coś będzie sypać, to możesz się podzielić przykładowym, minimalnym, błędnym kodem, to Cię spróbujemy naprowadzić.

0

Bo fprintf mi jakoś nie działa.... — lifo 2023-08-21 23:10

:)

Gratulacje. Nawet nie za umiejętności, ale za praktyczne prowadzące do rozwiązania problemu komunikowanie

No to byś się naprawdę zdziwił. Zastanawiam się po co chcę Ci się pisać cokolwiek co nic nie wnosi, ja wiem jak zapisywać txt czy bin. — lifo 2023-08-21 23:10

Zdziwił bym się, jakbyś napisał sam dwie linijki.

1
Althorion napisał(a):

Nie kojarzę żadnej biblioteki do zapisu CSV, bo też i żadna nie jest potrzebna, poza biblioteką standardową. Jak piszesz w C++, to jak najbardziej coutofstream Ci wystarczą — tylko pamiętaj, że CSV to zapis tekstowy, nie binarny.

Jeśli dalej Ci się coś będzie sypać, to możesz się podzielić przykładowym, minimalnym, błędnym kodem, to Cię spróbujemy naprowadzić.

Eskejpowanie przecinków, eskejpowanie cudzysłowów, eskejpowanie enterów*, coś jeszcze w stringu może rozwalić plik CSV?

Ale faktycznie. Twórcy bibliotek do C++ jacyś dziwny są :P W Javie czy Scali to był standard że każda biblioteka do parsowania CSV umiała też wypisać CSV a tutaj jakby programiści C++ woleli zrobić to sami. Dopiero z dziesiąta biblioteka do parsowania CSV umie też wypisywać
https://arrow.apache.org/docs/cpp/csv.html

1
KamilAdam napisał(a):

Eskejpowanie przecinków, eskejpowanie cudzysłowów, eskejpowanie enterów*, coś jeszcze w stringu może rozwalić plik CSV?

Wrzucanie stringów na pałę w podwójny cudzysłów obsłuży wszystkie te przypadki. Tak, niewyespace’owany cudzysłów też: patrz punkt 2.6

EDYCJA: no dobra, w praktyce warto wyescape’ować podwójny cudzysłów w stringu. Robi się to umiarkowanie dziwacznie — nie przez backslash \", tylko przez podwojenie cudzysłowu: "". Czyli tak: pierwsze pole, "drugie pole z wyescape’owanym "" cudzysłowem, z przecinkiem też, bo czemu nie", "trzecie pole"

0
KamilAdam napisał(a):

Eskejpowanie przecinków, eskejpowanie cudzysłowów, eskejpowanie enterów*, coś jeszcze w stringu może rozwalić plik CSV?

Nasz bardzo precyzyjny OP nie sprecyzował, jakie to są dane. Tablica.

Lata temu byłem doktorantem CSV, na przełomie jak branża schodziła z DOS-a. Bosch ile było dialektów. Że nie wspomnę o samym standardzie kodowania znaków, wszystkie 8bitowe po zyskujacy unikod.
Nie wiem, czy na 2023 jest na to jakieś RFC, ale jest chyba łatwiej.

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