diff options
| author | Thomas Schmucker <ts@its1.de> | 2025-04-13 22:43:46 +0200 |
|---|---|---|
| committer | Thomas Schmucker <ts@its1.de> | 2025-04-13 22:43:46 +0200 |
| commit | 7d956c533e9fd7d3bbb9a4a8b7f89f0fe54d4bc3 (patch) | |
| tree | ea1c5bc19dfe6bacad2d377378c460ee5284e74e /lib/src/csv.c | |
| parent | 85fe3b67a67825dfc5e43959f001b2a7159dc23f (diff) | |
| download | libcsv-7d956c533e9fd7d3bbb9a4a8b7f89f0fe54d4bc3.tar.gz libcsv-7d956c533e9fd7d3bbb9a4a8b7f89f0fe54d4bc3.tar.bz2 libcsv-7d956c533e9fd7d3bbb9a4a8b7f89f0fe54d4bc3.zip | |
first draft
Diffstat (limited to 'lib/src/csv.c')
| -rw-r--r-- | lib/src/csv.c | 74 |
1 files changed, 37 insertions, 37 deletions
diff --git a/lib/src/csv.c b/lib/src/csv.c index e9c7464..ba78dbd 100644 --- a/lib/src/csv.c +++ b/lib/src/csv.c | |||
| @@ -305,35 +305,35 @@ csv_read(csv_t *csv, FILE *in) | |||
| 305 | csv_field_reset(&csv->csv_field); | 305 | csv_field_reset(&csv->csv_field); |
| 306 | 306 | ||
| 307 | for ( int state = STATE_START_FIELD;; ) { | 307 | for ( int state = STATE_START_FIELD;; ) { |
| 308 | int ch; | 308 | int chr; |
| 309 | 309 | ||
| 310 | switch ( state ) { | 310 | switch ( state ) { |
| 311 | case STATE_START_FIELD: | 311 | case STATE_START_FIELD: |
| 312 | csv_field_append(&csv->csv_field, csv->csv_string.pos, csv->csv_options); | 312 | csv_field_append(&csv->csv_field, csv->csv_string.pos, csv->csv_options); |
| 313 | 313 | ||
| 314 | ch = getc(in); | 314 | chr = getc(in); |
| 315 | if ( ch == EOF ) { | 315 | if ( chr == EOF ) { |
| 316 | state = STATE_END_FILE; | 316 | state = STATE_END_FILE; |
| 317 | } | 317 | } |
| 318 | else if ( ch == '\r' ) { // test for CR.. | 318 | else if ( chr == '\r' ) { // test for CR.. |
| 319 | ch = getc(in); | 319 | chr = getc(in); |
| 320 | if ( ch != '\n' ) { // ..LF | 320 | if ( chr != '\n' ) { // ..LF |
| 321 | (void) ungetc(ch, in); | 321 | (void) ungetc(chr, in); |
| 322 | } | 322 | } |
| 323 | state = STATE_END_LINE; | 323 | state = STATE_END_LINE; |
| 324 | } | 324 | } |
| 325 | else if ( ch == '\n' ) { | 325 | else if ( chr == '\n' ) { |
| 326 | state = STATE_END_LINE; | 326 | state = STATE_END_LINE; |
| 327 | } | 327 | } |
| 328 | else if ( ch == SEP ) { | 328 | else if ( chr == SEP ) { |
| 329 | state = STATE_END_FIELD; | 329 | state = STATE_END_FIELD; |
| 330 | } | 330 | } |
| 331 | else if ( ch == DELIM ) { | 331 | else if ( chr == DELIM ) { |
| 332 | state = STATE_QUOTED_FIELD; | 332 | state = STATE_QUOTED_FIELD; |
| 333 | } | 333 | } |
| 334 | else { | 334 | else { |
| 335 | if ( ch != '\0' ) { | 335 | if ( chr != '\0' ) { |
| 336 | csv_string_append(&csv->csv_string, ch, csv->csv_options); | 336 | csv_string_append(&csv->csv_string, chr, csv->csv_options); |
| 337 | } | 337 | } |
| 338 | state = STATE_SIMPLE_FIELD; | 338 | state = STATE_SIMPLE_FIELD; |
| 339 | } | 339 | } |
| @@ -341,39 +341,39 @@ csv_read(csv_t *csv, FILE *in) | |||
| 341 | 341 | ||
| 342 | case STATE_QUOTED_FIELD: | 342 | case STATE_QUOTED_FIELD: |
| 343 | do { | 343 | do { |
| 344 | ch = getc(in); | 344 | chr = getc(in); |
| 345 | if ( ch == EOF ) { | 345 | if ( chr == EOF ) { |
| 346 | state = STATE_END_FILE; | 346 | state = STATE_END_FILE; |
| 347 | } | 347 | } |
| 348 | else if ( ch == DELIM ) { | 348 | else if ( chr == DELIM ) { |
| 349 | ch = getc(in); | 349 | chr = getc(in); |
| 350 | if ( ch == EOF ) { | 350 | if ( chr == EOF ) { |
| 351 | state = STATE_END_FILE; | 351 | state = STATE_END_FILE; |
| 352 | } | 352 | } |
| 353 | else if ( ch == DELIM ) { | 353 | else if ( chr == DELIM ) { |
| 354 | csv_string_append(&csv->csv_string, DELIM, csv->csv_options); | 354 | csv_string_append(&csv->csv_string, DELIM, csv->csv_options); |
| 355 | } | 355 | } |
| 356 | else if ( ch == SEP ) { | 356 | else if ( chr == SEP ) { |
| 357 | state = STATE_END_FIELD; | 357 | state = STATE_END_FIELD; |
| 358 | } | 358 | } |
| 359 | else if ( ch == '\r' ) { | 359 | else if ( chr == '\r' ) { |
| 360 | ch = getc(in); | 360 | chr = getc(in); |
| 361 | if ( ch != '\n' ) { | 361 | if ( chr != '\n' ) { |
| 362 | (void) ungetc(ch, in); | 362 | (void) ungetc(chr, in); |
| 363 | } | 363 | } |
| 364 | state = STATE_END_LINE; | 364 | state = STATE_END_LINE; |
| 365 | } | 365 | } |
| 366 | else if ( ch == '\n' ) { | 366 | else if ( chr == '\n' ) { |
| 367 | state = STATE_END_LINE; | 367 | state = STATE_END_LINE; |
| 368 | } | 368 | } |
| 369 | else { | 369 | else { |
| 370 | csv_string_append(&csv->csv_string, DELIM, csv->csv_options); | 370 | csv_string_append(&csv->csv_string, DELIM, csv->csv_options); |
| 371 | (void) ungetc(ch, in); // we have read too far... Put the character back! | 371 | (void) ungetc(chr, in); // we have read too far... Put the character back! |
| 372 | } | 372 | } |
| 373 | } | 373 | } |
| 374 | else { | 374 | else { |
| 375 | if ( ch != '\0' ) { | 375 | if ( chr != '\0' ) { |
| 376 | csv_string_append(&csv->csv_string, ch, csv->csv_options); | 376 | csv_string_append(&csv->csv_string, chr, csv->csv_options); |
| 377 | } | 377 | } |
| 378 | } | 378 | } |
| 379 | } while ( state == STATE_QUOTED_FIELD ); | 379 | } while ( state == STATE_QUOTED_FIELD ); |
| @@ -381,26 +381,26 @@ csv_read(csv_t *csv, FILE *in) | |||
| 381 | 381 | ||
| 382 | case STATE_SIMPLE_FIELD: | 382 | case STATE_SIMPLE_FIELD: |
| 383 | do { | 383 | do { |
| 384 | ch = getc(in); | 384 | chr = getc(in); |
| 385 | if ( ch == EOF ) { | 385 | if ( chr == EOF ) { |
| 386 | state = STATE_END_FILE; | 386 | state = STATE_END_FILE; |
| 387 | } | 387 | } |
| 388 | else if ( ch == SEP ) { | 388 | else if ( chr == SEP ) { |
| 389 | state = STATE_END_FIELD; | 389 | state = STATE_END_FIELD; |
| 390 | } | 390 | } |
| 391 | else if ( ch == '\r' ) { | 391 | else if ( chr == '\r' ) { |
| 392 | ch = getc(in); | 392 | chr = getc(in); |
| 393 | if ( ch != '\n' ) { | 393 | if ( chr != '\n' ) { |
| 394 | (void) ungetc(ch, in); | 394 | (void) ungetc(chr, in); |
| 395 | } | 395 | } |
| 396 | state = STATE_END_LINE; | 396 | state = STATE_END_LINE; |
| 397 | } | 397 | } |
| 398 | else if ( ch == '\n' ) { | 398 | else if ( chr == '\n' ) { |
| 399 | state = STATE_END_LINE; | 399 | state = STATE_END_LINE; |
| 400 | } | 400 | } |
| 401 | else { | 401 | else { |
| 402 | if ( ch != '\0' ) { | 402 | if ( chr != '\0' ) { |
| 403 | csv_string_append(&csv->csv_string, ch, csv->csv_options); | 403 | csv_string_append(&csv->csv_string, chr, csv->csv_options); |
| 404 | } | 404 | } |
| 405 | } | 405 | } |
| 406 | } while ( state == STATE_SIMPLE_FIELD ); | 406 | } while ( state == STATE_SIMPLE_FIELD ); |
