Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di shane007
    Registrato dal
    Jun 2011
    residenza
    Trentino, tra vacche ed aria buona.
    Messaggi
    55

    Fare il parsing di un file

    Ciao a tutti, ho dei problemi nel fare il parse di un file strutturato in questo modo:
    codice:
    Milano 33719 5 - cod 23425334
    Firenze 32453 5 - cod 298234234
    Bologna 9535 3 via_prati,via_3_novembre,via_travai, cod 2892342
    Praga 36439 5 - cod 29834234
    Roma 97275 3 via_prati,via_3_novembre,via_travai, cod 289234234

    e vorrei leggero per poi stampare a schermo una cosa del genere:


    codice:
    
    Module: Firenze  
    Size: 33719 
    Nused: 5
    Usef by: -
    
    
    
    
    Module: Bologna  
    Size: 33719 
    Nused: 3
    Usef by: via_prati,via_3_novembre,via_travai
    
    
    ecc...

    Il "cod 23425334" non devo stamparo.


    Questo è il mio codice, ma come potete vedere è tutto sfasato:


    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    int main(int* argc, char* argv[]){
        FILE *fp;
        char *line=NULL;
        char ch;
        char mod[256],size[256],nused[256],usedby[1024];
        int i=0,fase=0;
        size_t len=0;
        ssize_t read;
        //fp=fopen("/proc/modules","r");
        fp=fopen("texto.txt","r");
        if(fp==NULL){
            perror("Errore nell' apertura del file.\n");
            exit(EXIT_FAILURE);
        }
            while(read=getline(&line,&len,fp)!=-1){
            strcpy(mod,"");
            strcpy(size,"");
            strcpy(usby,"");
            strcpy(car,"");
            fase=0;
            for(i=0;i<strlen(line);i++){
                if(line[i] == '\t'){
                    fase++;
                }
                else if(fase==0){
                    car[0]=line[i];
                    strcat(mod,car);
                }
                else if(fase==1){
                    car[0]=line[i];
                    strcat(size,car);
                }
                else if(fase==2){
                    car[0]=line[i];
                    strcat(usby,car);
                    break;
                }
                else if(fase==3){
                    car[0]=line[i];
                    strcat(usedby,car);
                    break;
                }
            }
            printf("Module : %s\nSize : %s\nUsed by : %s processes:\n\t",mod,size,nused,usedby);
        }
        fclose(fp);
        return 0;
    }

    Questo è l'output SBAGLIATO che mi da:;


    Module : Milano 33719 5 - cod 23425334


    Size :
    Used by : processes:
    Module : Firenze 32453 5 - cod 298234234


    Size :
    Used by : processes:
    Module : Bologna 9535 3 via_prati,via_3_novembre,via_travai, cod 2892342


    Size :
    Used by : processes:
    Module : Praga 36439 5 - cod 29834234


    Size :
    Used by : processes:
    Module : Roma 97275 3 via_prati,via_3_novembre,via_travai, cod 289234234
    Size :
    Used by : processes:

    Io non so come risolvere il problema... dove sbaglio?
    Ultima modifica di shane007; 20-05-2014 a 14:34
    Siamo nel 2014, ci sono tante belle cose come Google, CodePen, Stackoverflow, ecc. Perché non usare?

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Che codice complicato :O

    Studiati questo:
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define cbreak " \t\r\n"
    
    int main(void) {
        FILE *f = stdin;
        char *l = NULL;
        size_t n = 0;
        while((getline(&l, &n, f)) != -1) {        
            printf("Module: %s\n", strtok(l, cbreak));
            printf("Size: %s\n", strtok(NULL, cbreak));
            printf("Nused: %s\n", strtok(NULL, cbreak));
            printf("Used by: %s\n\n", strtok(NULL, cbreak));
        }
        free(l);
        return EXIT_SUCCESS;
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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.