summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/csv.md19
1 files changed, 10 insertions, 9 deletions
diff --git a/doc/csv.md b/doc/csv.md
index 334de91..cfdd8ee 100644
--- a/doc/csv.md
+++ b/doc/csv.md
@@ -32,8 +32,8 @@ csv_t csv = { 0 }; oder csv_t csv;
32 32
33~~~ 33~~~
34for ( size_t nf; (nf = csv_read(&csv, in)) != 0; ) { /* eine Zeile aus `in` lesen */ 34for ( size_t nf; (nf = csv_read(&csv, in)) != 0; ) { /* eine Zeile aus `in` lesen */
35 for ( size_t i = 0; i < nf; i++ ) { /* `nf` beinhaltet die Feldanzahl */ 35 for ( size_t i = 0; i != nf; i++ ) { /* `nf` beinhaltet die Feldanzahl */
36 const char *s = csv_field(&csv, i); /* jedes Feld der Zeile ansprechen */ 36 const char *s = csv_field(&csv, i); /* Feld `i` der gelesenen Zeile ansprechen */
37 /* ... */ 37 /* ... */
38 } 38 }
39} 39}
@@ -43,7 +43,7 @@ Es sind nur zwei Funktionen notwendig, um die Daten des FILE-Streams `in` vollst
43`csv_read()` liest eine Zeile aus dem Parameter `in` und liefert die Anzahl der erfolgreich geparsten Felder oder **`EOF`** bei Dateiende. 43`csv_read()` liest eine Zeile aus dem Parameter `in` und liefert die Anzahl der erfolgreich geparsten Felder oder **`EOF`** bei Dateiende.
44`csv_field()` liefert einen (read only) `const char`-Zeiger für das i-te Feld. 44`csv_field()` liefert einen (read only) `const char`-Zeiger für das i-te Feld.
45 45
46Der Speicher für das CSV-Objekt wird automatisch von `csv_read()` beim ersten Aufruf alloziert und wieder freigeben wenn der Stream `in` vollständig gelesen wurde. 46Der Speicher für das CSV-Objekt wird automatisch von `csv_read()` beim ersten Aufruf alloziert und wieder freigeben nachdem der Stream `in` vollständig gelesen wurde.
47 47
48## Motivation 48## Motivation
49 49
@@ -51,7 +51,8 @@ Die meisten anderen CSV-Bibliotheken passen nicht:
51 51
52- falsche Verarbeitung bei eingeklammerten Feldern: 52- falsche Verarbeitung bei eingeklammerten Feldern:
53 C++: `getline()` -> `stringstream` -> `getline()`; 53 C++: `getline()` -> `stringstream` -> `getline()`;
54 C: `fgets()` -> `strtok`() 54 C: `fgets()` -> `strtok`()
55 Irgendwelche regulären Ausdrücke
55- fehlerhafte Verarbeitung von "problematischen" CSV-Dateien (Linebreaks innerhalb einer Zelle) 56- fehlerhafte Verarbeitung von "problematischen" CSV-Dateien (Linebreaks innerhalb einer Zelle)
56- unvorteilhafte Lizenz (GPL) 57- unvorteilhafte Lizenz (GPL)
57- umständliche API (Callbacks zum Verarbeiten der Inhalte, seltsames Handling am Dateiende) 58- umständliche API (Callbacks zum Verarbeiten der Inhalte, seltsames Handling am Dateiende)
@@ -118,7 +119,7 @@ typedef struct {
118 119
119~~~ 120~~~
120void csv_init(csv_t *csv); 121void csv_init(csv_t *csv);
121void csv_init_opt(csv_t *csv, const csv_options_t * const csv_options); 122void csv_init_opt(csv_t *csv, const csv_options_t *const csv_options);
122~~~ 123~~~
123 124
124**Manuelles Freigeben** 125**Manuelles Freigeben**
@@ -130,20 +131,20 @@ void csv_cleanup(csv_t *csv);
130**Zeilenweises Lesen** 131**Zeilenweises Lesen**
131 132
132~~~ 133~~~
133int csv_read(csv_t *csv, FILE *in); 134size_t csv_read(csv_t *csv, FILE *in);
134~~~ 135~~~
135 136
136**Feldzugriff** 137**Feldzugriff**
137 138
138~~~ 139~~~
139int csv_nfields(const csv_t * const csv); 140size_t csv_nfields(const csv_t *const csv);
140const char * csv_field(const csv_t * const csv, int idx); 141const char *csv_field(const csv_t *const csv, size_t idx);
141~~~ 142~~~
142 143
143**Fehlercodes als Textmeldung** 144**Fehlercodes als Textmeldung**
144 145
145~~~ 146~~~
146const char * csv_err_str(csv_err_t csv_err); 147const char *csv_err_str(csv_err_t csv_err);
147~~~ 148~~~
148 149
149## Fehlerbehandlung 150## Fehlerbehandlung