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!
zapis do pliku csv
- Rejestracja: dni
- Ostatnio: dni
- Rejestracja: dni
- Ostatnio: dni
- Postów: 293
Zacznij od tego, żeby te dane wyswietlić na ekranie w formacie csv.
A potem tylko podmień cout na strumień reprezentujący plik.
- Rejestracja: dni
- Ostatnio: dni
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 :(
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1620
Nie kojarzę żadnej biblioteki do zapisu CSV, bo też i żadna nie jest potrzebna, poza biblioteką standardową. Jak piszesz w C++, to jak najbardziej cout i ofstream 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ć.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2310
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.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Silesia/Marki
- Postów: 5549
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
coutiofstreamCi 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
- Rejestracja: dni
- Ostatnio: dni
- Postów: 1620
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"
- Rejestracja: dni
- Ostatnio: dni
- Postów: 2310
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.