Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
* [C] comparazione file di testo
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
ali7.p
Comune mortale
Comune mortale


Registrato: 06/07/06 15:15
Messaggi: 5

MessaggioInviato: 06 Lug 2006 15:16    Oggetto: * [C] comparazione file di testo Rispondi citando

Help me please!!

Devo scrivere un prgramma C che accetta come parametri di ingresso due file di testo e restituisce in uscita la copia delle righe del secondo file che differiscono dalle corrispondenti righe del primo indicando per ciascuna di esse il numero di riga

... almeno datemi qualche suggerimento...
Top
Profilo Invia messaggio privato
longinous
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 29/06/06 12:32
Messaggi: 141
Residenza: la grande rete è la mia casa

MessaggioInviato: 06 Lug 2006 21:39    Oggetto: Rispondi citando

inserire l'intera riga in un vettore e fare strcmp mi pare adatto...
l'importante è segnarsi la riga e l'uscita di strcmp, per il resto direi che non c'è problema, tanto le righe finiscono col \n ed è un terminatore riconoscibilissimo (occhio che se è stato scritto in win il terminatore bastardo è \n\r... non chiedermi perchè probabilmente oltre che la nuova riga devi pure dirgli di andare a capo: \n(ewline)\r(eturn))
Top
Profilo Invia messaggio privato HomePage
ali7.p
Comune mortale
Comune mortale


Registrato: 06/07/06 15:15
Messaggi: 5

MessaggioInviato: 11 Lug 2006 16:47    Oggetto: Rispondi citando

io ho buttao giù questo codice... ma c'è qualcosa che non va... Crying or Very sad

Codice:

#include <stdio.h>
#include<string.h>


char array1[MAX_DIM];
char array2[MAX_DIM];
char aux1[MAX_DIM];
char aux2[MAX_DIM];

unsigned int contatoreRighe=1;
unsigned int pos1=0;
unsigned int pos2=0;
unsigned int i;


int main (int argc, char *argv[]) {
   
   if (argc != 3) {
      printf("Parametri non validi - La sintassi corretta e'\n\n"
      "%s file_1 file_2\n", argv[0]);
      exit(1);
   }
   
   FILE *fp;
   fp=fopen(argv[1],"r");
   if(fp==NULL) {
        printf("ERRORE nell'accesso ai dati");
        exit(1);
   }

   FILE *fp1;   
   fp1=fopen(argv[2],"r");
   if(fp1==NULL) {
        printf("ERRORE nell'accesso ai dati");
        exit(0);
   }


   while ((array[pos1])&&(array2[pos2])) {
         for (i=0;((array1[pos1]!=newline)&&(array1[pos1]));pos1++,i++)
              aux1[i]=array1[pos1];
         aux1[i]='\0'; // chiude la stringa copiata carattere per carattere
         for (i=0;((array2[pos2]!=newline)&&(array2[pos2]));pos2++,i++)
              aux2[i]=array2[pos2];
         aux2[i]='0';

         if (strcmp(aux1,aux2)!=0)
              printf("\nRiga numero %u: %s\n", contatoreRighe,aux2);
         
         contatoreRighe++;
         if (array1[pos1])    // incrementa indice array solo se non è alla fine
                 pos1++;
         if (array2[pos2])         
                 pos2++;
   }
}
Top
Profilo Invia messaggio privato
longinous
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 29/06/06 12:32
Messaggi: 141
Residenza: la grande rete è la mia casa

MessaggioInviato: 11 Lug 2006 17:55    Oggetto: Rispondi citando

ali7.p ha scritto:
io ho buttao giù questo codice... ma c'è qualcosa che non va... Crying or Very sad

e vorrei vedere...
accidenti erano 3 mesi che non toccavo niente scritto in c, ma per fortuna non sono ancora del tutto arrugginito.

ora l'ho sistemato e funziona, l'importante è che alla fine del file non sia andato a capo o ti legge due volte l'ultima riga (non è proprio così, ma è come se lo fosse)con conseguenze imprevedibili.
non ho voglia di sistemare quel bug, te lo lascio per compito a casa.


Codice:
#include <stdio.h>
#include <string.h>


#define MAX_DIM 10000000 //non ti puoi inventare variabili di sistema... l'ho messo alto che vai sicuro

char array1[MAX_DIM];
char array2[MAX_DIM];

unsigned int contatoreRighe=1;


int main (int argc, char *argv[]) {
   
   if (argc != 3) {
      printf("Parametri non validi - La sintassi corretta e'\n\n"
      "%s file_1 file_2\n", argv[0]);
      exit(1);
   }
   
   FILE *fp;
   fp=fopen(argv[1],"r");
   if(fp==NULL) {
        printf("ERRORE nell'accesso ai dati");
        exit(1);
   }

   FILE *fp1;   
   fp1=fopen(argv[2],"r");
   if(fp1==NULL) {
        printf("ERRORE nell'accesso ai dati");
        exit(0);
   }
//fino a qui nulla da dire, da manuale del bravo programmatore...

   while (!feof(fp) && !feof(fp1)) {
   fgets(array1, MAX_DIM, fp);
   fgets(array2, MAX_DIM, fp1);
/*qui ti ho dovuto smembrare tutto e riscriverlo da capo
//innanzi tutto usavi le stringhe in modo non permesso dal c (compararle lettera a lettera non è permesso)
//ma, come se non bastasse, non si capive da dove le prendevi quelle stringhe
//hai aperto il file, ma non l'hai letto (e sui file discorso a parte sotto)
//quindi ti ho messo due bellissi fgets che leggono fino a MAX_DIM o fino a \n
//uno per file
*/
        if (strcmp(array1,array2)!=0)   //qui controllo le due stringhe/righe
              printf("\nRiga numero %u: %s\n", contatoreRighe,array2);   //se sono diverse lo faccio notare
         contatoreRighe++;
   }

//bello aprire i file, ma se li chiudessi pure non sarebbe male
fclose(pf);
fclose(pf1);
}


ecco qua, leggiti i commenti nel codice che ti spiegano un po' tutto
Top
Profilo Invia messaggio privato HomePage
ali7.p
Comune mortale
Comune mortale


Registrato: 06/07/06 15:15
Messaggi: 5

MessaggioInviato: 01 Set 2006 16:48    Oggetto: Rispondi

mi ero dimenticata di ringraziarti... Embarassed Embarassed
GRAZIE!
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi