void do_export(int r0, int c0, int rn, int cn) { int force_rewrite = 0; char type_export[4] = ""; char ruta[PATHLEN]; char linea[BUFFERSIZE]; if (inputline[1] == '!') force_rewrite = 1; strcpy(linea, inputline); // copio a una nueva variable para no afectar el historial de comandos del_range_chars(linea, 0, 1 + force_rewrite); // elimino 'e ' o 'e! ' del inputline // obtengo el tipo de formato al cual se exportará la planilla if (str_in_str(linea, "csv") == 0) { strcpy(type_export, "csv"); } else if (str_in_str(linea, "tab") == 0) { strcpy(type_export, "tab"); } // luego obtengo la ruta y denominación del archivo a grabar. // si se ingresa una como parametro, se la toma. if (strlen(linea) > 4) { // 'csv ' del_range_chars(linea, 0, 3); // elimino 'csv ' strcpy(ruta, linea); // si no se ingresa una, se toma el nombre de curfile y se le agrega el tipo de extensión (csv o tab) // se verifica si el nombre actual termina con ".sc" y se lo quita si es necesario. } else if (curfile[0]) { strcpy(ruta, curfile); char * ext = strrchr(ruta, '.'); if (ext != NULL) del_range_chars(ruta, strlen(ruta) - strlen(ext), strlen(ruta)-1); sprintf(ruta + strlen(ruta), ".%s", type_export); } else { error("No filename specified !"); return; } if (! force_rewrite && file_exists(ruta) && strlen(ruta) > 0) { error("File %s already exists. Use \"!\" to force rewrite.", ruta); return; } // llamo a las rutinas de exportacion if (strcmp(type_export, "csv") == 0) { export_delim(ruta, ',', r0, c0, rn, cn); } if (strcmp(type_export, "tab") == 0) { export_delim(ruta, '\t', r0, c0, rn, cn); } }
/* unspecial (backquote -> ") things that are special chars in a table */ void unspecial(FILE *f, char *str, int delim) { int backquote = 0; if (str_in_str(str, ",") != -1) backquote = 1; if (backquote) putc('\"', f); while (*str) { putc(*str, f); str++; } if (backquote) putc('\"', f); }
// Apply filters to a range void enable_filters(struct ent * left, struct ent * right) { int minr = left->row < right->row ? left->row : right->row; int maxr = left->row > right->row ? left->row : right->row; int i, r, c = 0; char cadena[200] = ""; char aux[200] = ""; results = (int *) scxrealloc((char *) results, (maxr - minr + 3) * sizeof(int)); results[0] = minr; // keep in first position the first row of the range! results[1] = maxr; // keep in second position the last row of the range! if (filters == NULL) { scerror("There are no filters defined"); return; } active = 1; for (r = minr; r <= maxr; r++) { results[r-minr+2] = 0; // show row by default (0 = NOT HIDDEN) for (i = 0; i < howmany; i++, c=0) { cadena[0]='\0'; if (filters[i].eval == NULL) continue; while (filters[i].eval[c] != '\0') { if (filters[i].eval[c] == '#' || filters[i].eval[c] == '$') { if (isalpha(toupper(filters[i].eval[++c]))) sprintf(cadena + strlen(cadena), "%c", filters[i].eval[c]); if (isalpha(toupper(filters[i].eval[++c]))) sprintf(cadena + strlen(cadena), "%c", filters[i].eval[c]); sprintf(cadena + strlen(cadena), "%d", r); continue; } else sprintf(cadena + strlen(cadena), "%c", filters[i].eval[c]); c++; } sprintf(aux, "eval %s", cadena); send_to_interp(aux); if ( (! seval_result && str_in_str(filters[i].eval, "seval") != -1) || ! eval_result) { results[r-minr+2] = 1; // this row does not eval to expression. we hide it. (1 = HIDDEN)! i = howmany; } } } // oculto las filas que no cumplen con los filtros for (r = results[0]; r <= results[1]; r++) { row_hidden[r] = results[r-results[0]+2]; } return; }
bool test_string_in_string() { const char *s1 = "iyed"; const char *s2 = "bennour iyed"; return str_in_str(s1, s2); }