- if (!creader)
- {
- creader = gnumeric_open_reader (&sri, &opts, &dict);
- ia->file.type = FTYPE_GNUMERIC;
- }
-
- if (!creader)
- {
- creader = ods_open_reader (&sri, &opts, &dict);
- ia->file.type = FTYPE_ODS;
- }
-
- if (creader)
- {
- int col;
- int rows = 0;
- struct ccase *c;
-
- sepp->column_cnt = dict_get_var_cnt (dict);
- sepp->columns = xcalloc (sepp->column_cnt, sizeof (*sepp->columns));
- for (col = 0; col < sepp->column_cnt ; ++col)
- {
- const struct variable *var = dict_get_var (dict, col);
- sepp->columns[col].name = xstrdup (var_get_name (var));
- sepp->columns[col].contents = NULL;
- }
-
- for (; (c = casereader_read (creader)) != NULL; case_unref (c))
- {
- rows++;
- for (col = 0; col < sepp->column_cnt ; ++col)
- {
- char *ss;
- const struct variable *var = dict_get_var (dict, col);
-
- sepp->columns[col].contents = xrealloc (sepp->columns[col].contents,
- sizeof (struct substring) * rows);
-
- ss = data_out (case_data (c, var), dict_get_encoding (dict),
- var_get_print_format (var));
-
- sepp->columns[col].contents[rows - 1] = ss_cstr (ss);
- }
-
- if (rows > MAX_PREVIEW_LINES)
- {
- case_unref (c);
- break;
- }
- }