Precedente :: Successivo |
Autore |
Messaggio |
ali7.p Mortale devoto
Registrato: 06/07/06 15:15 Messaggi: 5
|
Inviato: 06 Lug 2006 15:16 Oggetto: * [C] comparazione file di testo |
|
|
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 |
|
|
longinous Eroe in grazia degli dei
Registrato: 29/06/06 12:32 Messaggi: 141 Residenza: la grande rete è la mia casa
|
Inviato: 06 Lug 2006 21:39 Oggetto: |
|
|
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 |
|
|
ali7.p Mortale devoto
Registrato: 06/07/06 15:15 Messaggi: 5
|
Inviato: 11 Lug 2006 16:47 Oggetto: |
|
|
io ho buttao giù questo codice... ma c'è qualcosa che non va...
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 |
|
|
longinous Eroe in grazia degli dei
Registrato: 29/06/06 12:32 Messaggi: 141 Residenza: la grande rete è la mia casa
|
Inviato: 11 Lug 2006 17:55 Oggetto: |
|
|
ali7.p ha scritto: | io ho buttao giù questo codice... ma c'è qualcosa che non va...
|
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 |
|
|
ali7.p Mortale devoto
Registrato: 06/07/06 15:15 Messaggi: 5
|
Inviato: 01 Set 2006 16:48 Oggetto: |
|
|
mi ero dimenticata di ringraziarti...
GRAZIE! |
|
Top |
|
|
|
|
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
|
|