Lettura e Scrittura con elaborazione FILE testo

di il
36 risposte

36 Risposte - Pagina 3

  • Re: Lettura e Scrittura con elaborazione FILE testo

    Oregon non mi fai inviare i file txt...... il link di drive non funziona??
  • Re: Lettura e Scrittura con elaborazione FILE testo

    https://drive.google.com/open?id=1lhPkyna4PMbxOO6uylbrgszs7ROMZsAT
  • Re: Lettura e Scrittura con elaborazione FILE testo

    @oregon ci sono novità riesci ad aiutarmi??
  • Re: Lettura e Scrittura con elaborazione FILE testo

    Ho scaricato i file e, come ti avevo detto sin dall'inizio, hanno un formato particolare, ovvero le linee "vuote" sono in realtà piene di spazi (avresti dovuto saperlo e dirlo prima ...)

    Il file ha un formato fisso e non libero come avevi indicato facendomi copiare il testo in un post.

    Non a caso dico di postare il file dati, proprio perché so che, nella maggior parte dei casi, agire con altri file è una perdita di tempo.

    Comunque, se modifichi il codice tenendo conto delle linee piene di spazi, hai l'output corretto - ovviamente - con tutti gli spazi in una linea. I dati dovrai estrarli tu pensando al codice opportuno.
    
    int main()
    {
    	FILE *fp = fopen("file.txt", "r");
    	if (!fp)
    	{
    		puts("Errore apertura file dati\n");
    		return -1;
    	}
    
    	bool fnd = false;
    	int erow = 0;
    	char *curr;
    	char tmpstr[MAXSTR];
    	while (fgets(tmpstr, MAXSTR, fp))
    	{
    		curr=tmpstr;
    		if(strstr(tmpstr, "Table:  Load Pattern")) fnd = true;
    		if(fnd)
    		{
    			while(*curr == 32) curr++;
    			if(*curr == 10) erow++; else erow = 0;
    			if (erow == 2) fnd = false;
    		}
    
    		if (fnd && *curr != 10) printf("%s", tmpstr);
    	}
    
    	fclose(fp);
    
    	return 0;
    }
    
    Se non tieni conto della riga del nome della tabella e di tutta la testata ma solo dei record dati allora il codice è semplificabile, in questo modo
    
    int main()
    {
    	FILE *fp = fopen("file.txt", "r");
    	if (!fp)
    	{
    		puts("Errore apertura file dati\n");
    		return -1;
    	}
    
    	int fnd = 0;
    	char tmpstr[MAXSTR];
    	while (fgets(tmpstr, MAXSTR, fp))
    	{
    		if(fnd==0)
    			if(strstr(tmpstr, "Table:  Load Pattern")) fnd = 1;
    
    		if(fnd==2)
    		{
    			char *curr=tmpstr;
    		
    			while(*curr == 32) curr++;
    			if(*curr == 10) break; 
    
    			printf("%s", tmpstr);
    		}
    
    		if(fnd==1)
    		{
    			for(int i=0; i<3; i++)
    				fgets(tmpstr, MAXSTR, fp);
    			fnd=2;
    		}
    	}
    
    	fclose(fp);
    
    	return 0;
    }
    
  • Re: Lettura e Scrittura con elaborazione FILE testo

    Non so tu chi sia, ma sei un mostro =).....comunque ora devo capire cosa hai fatto e poi capire come spostare memorizzare il contenuto in matrici e fare le opportune modifiche....poi devo farlo per ogni tabella che voglio...e scrivere un nuovo file txt con le modifiche fatte e ordinando le tabelle non come esco automaticamente dal programma ma come le vorrei io....devo capire questa parte di codice che hai scritto
    ]while(*curr == 32) curr++;
    			if(*curr == 10) erow++; else erow = 0;
    			if (erow == 2) fnd = false;
    
    da quello che capisco 32 sono i caratteri di "Table: Load Pattern" o sbaglio?? e capire gli altri 2 "if"
    comunque grazie già per quello che hai fatto.
  • Re: Lettura e Scrittura con elaborazione FILE testo

    Ma che mostro, programmazione elementare C.

    Il 32 è il codice Ascii dello spazio e il ciclo serve a determinare se la riga è fatta solo da spazi.

    Ti consiglio di guardare il secondo codice che ti ho proposto. Da adesso buona continuazione.
  • Re: Lettura e Scrittura con elaborazione FILE testo

    Grazie mille =)
Devi accedere o registrarti per scrivere nel forum
36 risposte