示例#1
0
文件: file.c 项目: groessler/scim
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);
    }
}
示例#2
0
文件: file.c 项目: groessler/scim
/* 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);
}
示例#3
0
文件: filter.c 项目: rubenerd/sc-im
// 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;
}
示例#4
0
bool test_string_in_string() {
  const char *s1 = "iyed";
  const char *s2 = "bennour iyed";
  
  return str_in_str(s1, s2);
}