diff options
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/csv.md | 19 |
1 files changed, 10 insertions, 9 deletions
| @@ -32,8 +32,8 @@ csv_t csv = { 0 }; oder csv_t csv; | |||
| 32 | 32 | ||
| 33 | ~~~ | 33 | ~~~ |
| 34 | for ( size_t nf; (nf = csv_read(&csv, in)) != 0; ) { /* eine Zeile aus `in` lesen */ | 34 | for ( 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 | ||
| 46 | Der 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. | 46 | Der 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 | ~~~ |
| 120 | void csv_init(csv_t *csv); | 121 | void csv_init(csv_t *csv); |
| 121 | void csv_init_opt(csv_t *csv, const csv_options_t * const csv_options); | 122 | void 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 | ~~~ |
| 133 | int csv_read(csv_t *csv, FILE *in); | 134 | size_t csv_read(csv_t *csv, FILE *in); |
| 134 | ~~~ | 135 | ~~~ |
| 135 | 136 | ||
| 136 | **Feldzugriff** | 137 | **Feldzugriff** |
| 137 | 138 | ||
| 138 | ~~~ | 139 | ~~~ |
| 139 | int csv_nfields(const csv_t * const csv); | 140 | size_t csv_nfields(const csv_t *const csv); |
| 140 | const char * csv_field(const csv_t * const csv, int idx); | 141 | const 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 | ~~~ |
| 146 | const char * csv_err_str(csv_err_t csv_err); | 147 | const char *csv_err_str(csv_err_t csv_err); |
| 147 | ~~~ | 148 | ~~~ |
| 148 | 149 | ||
| 149 | ## Fehlerbehandlung | 150 | ## Fehlerbehandlung |
