// fname indica la ruta y denominación del archivo void export_delim(char * fname, char coldelim, int r0, int c0, int rn, int cn) { FILE *f; int row, col; register struct ent **pp; int pid; info("Writing file \"%s\"...", fname); if ((f = openfile(fname, &pid, NULL)) == (FILE *)0) { error ("Can't create file \"%s\"", fname); return; } struct ent * ent = go_end(); if (rn > ent->row) rn = ent->row; //if (cn > ent->col) cn = ent->col; for (row = r0; row <= rn; row++) { for (pp = ATBL(tbl, row, col = c0); col <= cn; col++, pp++) { if (*pp) { char * s; if ((*pp)->flags & is_valid) { if ((*pp)->cellerror) { (void) fprintf (f, "%*s", fwidth[col], ((*pp)->cellerror == CELLERROR ? "ERROR" : "INVALID")); } else if ((*pp)->format) { char field[FBUFLEN]; if (*((*pp)->format) == 'd') { // formato fecha time_t v = (time_t) ((*pp)->v); strftime(field, sizeof(field), ((*pp)->format)+1, localtime(&v)); } else { // formato numerico format((*pp)->format, precision[col], (*pp)->v, field, sizeof(field)); } ltrim(field, ' '); unspecial(f, field, coldelim); } else { //eng number format char field[FBUFLEN] = ""; (void) engformat(realfmt[col], fwidth[col], precision[col], (*pp)->v, field, sizeof(field)); ltrim(field, ' '); unspecial(f, field, coldelim); } } if ((s = (*pp)->label)) { ltrim(s, ' '); unspecial(f, s, coldelim); } } if (col < cn) (void) fprintf(f,"%c", coldelim); } (void) fprintf(f,"\n"); } closefile(f, pid, 0); if (! pid) { info("File \"%s\" written", fname); } }
void fgetnum(int r0, int c0, int rn, int cn, int fd) { struct ent **pp; struct ent *p; int r, c; for (r = r0; r <= rn; r++) { for (c = c0, pp = ATBL(tbl, r, c); c <= cn; pp++, c++) { *line = '\0'; p = *pp; if (p) { if (p->cellerror) sprintf(line, "%s", p->cellerror == CELLERROR ? "ERROR" : "INVALID"); else if (p->flags & is_valid) { if (p->format) { if (*(p->format) == ctl('d')) { time_t i = (time_t) (p->v); strftime(line, sizeof(line), (p->format)+1, localtime(&i)); } else format(p->format, precision[c], p->v, line, sizeof(line)); } else engformat(realfmt[c], fwidth[c], precision[c], p->v, line, sizeof(line)); } } if (c < cn) strcat(line, "\t"); else strcat(line, "\n"); write(fd, line, strlen(line)); if (brokenpipe) { linelim = -1; return; } } } linelim = -1; }