Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2018
    Messaggi
    4

    Controllare se una stringa e' presente in un file ed eliminarla eventualmente C

    Salve, mi servirebbe una funzione C che legga da un file linea per linea e, se trova una corrispondenza con un char * passato come parametro la elimina dal file.

    La mia idea era quella di usare un file di appoggio e proseguire in questo modo:
    leggo una riga del file, se e' diversa dalla stringa passata come argomento non la copio nel file di appoggio, altrimenti si.
    Quando ho finito il file, rinomino il file di appoggio col nome del file "originale".

    Vi posto il codice:
    codice:
    void delete_from_file(FILE *f, char *filename)/** Cancella ogni riga uguale a filename dal file.*/
    {
        printf("in delete from file\n");
        FILE *copy = fopen("copy.txt", "w+");
        if(copy == NULL)
            err_func("Errore in fopen()\n");
        while(1){
            char *buffer = NULL;
            size_t len;
            ssize_t read;
            read = getline(&buffer, &len, f);
            if(read == -1 && feof(f) == 0)
                err_func("Errore getline()\n");
            if(strcmp(buffer, filename) != 0){
                printf("nella delete from buffer = %s e filename = %s\n", buffer, filename);
                if((unsigned int)fprintf(copy,"%s", buffer) != strlen(buffer))
                    err_func("Errore in fprintf()\n");
            }
            if(read == -1 && feof(f) != 0)
                break;
            free(buffer);
        }
        if(rename("copy.txt", "files_dirty.txt") != 0)
            err_func("Errore in rename()\n");
        if(fclose(copy) != 0)
            err_func("Errore in fclose()\n");
    }
    ("files_dirty.txt" e' il nome del file originale).

    Le righe sono inserite in questo file in questo modo:
    codice:
    if((unsigned int)fprintf(f, "%s\n", filename) != strlen(filename)+1)
                                    err_func("Errore in fprintf()\n");
    In pratica quello che devo fare e' tenere una lista di nomi di file su un file di testo e all'occorrenza devo anche poterli rimuovere.
    Il problema e' che eseguendo il codice non riesco a far combaciare la stringa ottenuta con getline() con quella passata come argomento... infatti eseguendo ottengo una roba del tipo

    codice:
    in delete from file
    nella delete from buffer = iliade.txt
     e filename = iliade.txt
    nella delete from buffer = e filename = iliade.txt
    Quello che devo fare e' porre nel file il nome "iliade.txt" (per esempio) e dopo aver fatto alcune cose devo togliere tale nome dal file.

    Spero qualcuno possa aiutarmi, so che non e' complicato ma non riesco a venirne a capo "con criterio" e procedere a tentativi non mi pare il caso.

    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    La getline è una tua funzione?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.