/* PSPP - a program for statistical analysis. Copyright (C) 2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ #include #include "progname.h" #include #include #include #include #include #include #include #include enum OPT { OPT_REFCHECK = 0x100, OPT_REVERSE, OPT_SHEET, OPT_METADATA }; static const struct option long_opts[] = { {"refcheck", no_argument, NULL, OPT_REFCHECK}, {"reverse", no_argument, NULL, OPT_REVERSE}, {"sheet", required_argument, NULL, OPT_SHEET}, {"metadata", no_argument, NULL, OPT_METADATA}, {0, 0, 0, 0} }; int main (int argc, char **argv) { set_program_name (argv[0]); bool refcheck = false; bool reverse = false; int sheet = 0; bool get_n_sheets = false; int opt; while ((opt = getopt_long (argc, argv, "", long_opts, NULL)) != -1) { switch (opt) { case OPT_METADATA: get_n_sheets = true; break; case OPT_REFCHECK: refcheck = true; break; case OPT_REVERSE: reverse = true; break; case OPT_SHEET: sheet = atoi (optarg); break; default: /* '?' */ fprintf (stderr, "Usage: spreadsheet-test [opts] file\n"); exit (EXIT_FAILURE); } } if (argc <= optind) { fprintf (stderr, "Usage: spreadsheet-test [-s n] [--refcheck] [--reverse] [--metadata] file\n"); exit (EXIT_FAILURE); } struct spreadsheet *ss = NULL; char *ext = strrchr (argv[optind], '.'); if (ext == NULL) return 1; if (0 == strcmp (ext, ".ods")) ss = ods_probe (argv[optind], true); else if (0 == strcmp (ext, ".gnumeric")) ss = gnumeric_probe (argv[optind], true); if (ss == NULL) return 1; if (get_n_sheets) { int n_sheets = spreadsheet_get_sheet_n_sheets (ss); printf ("Number of sheets: %d\n", n_sheets); goto end; } int rows = spreadsheet_get_sheet_n_rows (ss, sheet); int columns = spreadsheet_get_sheet_n_columns (ss, sheet); printf ("Rows %d; Columns %d\n", rows, columns); for (int r_ = 0; r_ < rows; r_++) { int r = reverse ? (rows - r_ - 1) : r_; for (int c_ = 0; c_ < columns; c_++) { int c = reverse ? (columns - c_ - 1) : c_ ; char *s = spreadsheet_get_cell (ss, sheet, r, c); if (refcheck) { int row, col; sscanf (s, "%d:%d", &row, &col); assert (row == r); assert (col == c); } else { fputs (s ? s : "", stdout); if (c_ < columns - 1) putchar ('\t'); } free (s); } if (!refcheck) { putchar ('\n'); } } rows = spreadsheet_get_sheet_n_rows (ss, sheet); columns = spreadsheet_get_sheet_n_columns (ss, sheet); end: spreadsheet_unref (ss); return 0; }

AltStyle によって変換されたページ (->オリジナル) /