aboutsummaryrefslogtreecommitdiff
path: root/csv.c
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2020-07-05 13:05:54 +0200
committerThomas Schmucker <ts@its1.de>2020-07-05 13:05:54 +0200
commit3cb39141f7cfd79c4ee731441bdf29a753351553 (patch)
tree2f63266589f917b40e9136cae64353c964c7ea61 /csv.c
parent5cad3a1a7176017982fb3afcdf8399df011868f8 (diff)
downloadlibcsv-3cb39141f7cfd79c4ee731441bdf29a753351553.tar.gz
libcsv-3cb39141f7cfd79c4ee731441bdf29a753351553.tar.bz2
libcsv-3cb39141f7cfd79c4ee731441bdf29a753351553.zip
Entferne die Routinen zum Schreiben eines CSV-Datei. Dies hier ist eine
Bibliothek zum Lesen/Parsen.
Diffstat (limited to 'csv.c')
-rw-r--r--csv.c91
1 files changed, 0 insertions, 91 deletions
diff --git a/csv.c b/csv.c
index 2948911..6bd157c 100644
--- a/csv.c
+++ b/csv.c
@@ -474,94 +474,3 @@ csv_err_str(csv_err_t csv_err)
474 } 474 }
475 // NOT REACHED 475 // NOT REACHED
476} 476}
477
478static void
479csv_write_field(FILE *out, const char *field, const csv_options_t *const csv_options)
480{
481 assert(csv_options != NULL);
482 assert(field != NULL);
483 assert(out != NULL);
484
485 register const int DELIM = csv_options->field_delimiter;
486
487 if ( *field != '\0' ) {
488 putc(DELIM, out);
489
490 for ( ; *field != '\0'; ++field ) {
491 if ( *field == DELIM ) {
492 putc(DELIM, out);
493 putc(DELIM, out);
494 }
495 else {
496 putc(*field, out);
497 }
498 }
499
500 putc(DELIM, out);
501 }
502
503 if ( ferror(out) ) {
504 csv_fatal_error(CSV_ERR_IO_WRITE, csv_options);
505 }
506}
507
508void
509csv_write(FILE *out, const csv_t *const csv)
510{
511 assert(out != NULL);
512 assert(csv != NULL);
513 assert(csv->csv_options != NULL);
514 assert(csv->csv_string.str != NULL);
515 assert(csv->csv_field.fields != NULL);
516
517 register const int SEP = csv->csv_options->field_separator;
518
519 if ( 0 < csv->csv_field.pos ) {
520 const char *str = csv->csv_string.str;
521 const int * field = csv->csv_field.fields;
522
523 csv_write_field(out, &str[*field++], csv->csv_options);
524
525 for ( int i = 1; i < csv->csv_field.pos; ++i ) {
526 putc(SEP, out);
527 csv_write_field(out, &str[*field++], csv->csv_options);
528 }
529 }
530 putc('\r', out);
531 putc('\n', out);
532
533 if ( ferror(out) ) {
534 csv_fatal_error(CSV_ERR_IO_WRITE, csv->csv_options);
535 }
536}
537
538void
539csv_write_ex(FILE *out, int n, const char *fields[], const csv_options_t *csv_options)
540{
541 assert(out != NULL);
542 assert(fields != NULL);
543
544 if ( csv_options == NULL ) {
545 csv_options = &csv_default_options;
546 }
547
548 register const int SEP = csv_options->field_separator;
549
550 // process first field
551 if ( 0 != n && *fields != NULL ) {
552 --n;
553 csv_write_field(out, *fields++, csv_options);
554
555 // process next fields
556 for ( ; n && *fields != NULL; --n, ++fields ) {
557 putc(SEP, out);
558 csv_write_field(out, *fields, csv_options);
559 }
560 }
561 putc('\r', out);
562 putc('\n', out);
563
564 if ( ferror(out) ) {
565 csv_fatal_error(CSV_ERR_IO_WRITE, csv_options);
566 }
567}