Confronto tra 2 file

di il
21 risposte

Confronto tra 2 file

Buongiorno, oggi il prof. ha assegnato un compito , confrontare 2 file txt i numeri presenti nel file A ma non presenti nel file B li devo copiare nel file C.vi faccio un esempio pratico:

file A.txt contiene:
52
26
78
14

il file b.txt contiene:
321
698
1
52
14

file C.txt
26
78


tutti i numeri che sono presenti nel file A ed non sono presenti nel file B li deve salvare nel file C.txt

io ho scritto questo codice, sintatticamente va ma non funziona si blocca
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;
char codv[240000],coda[65000];
int i=0,j=0;

int main ()
{

ifstream file("affid.txt");
ifstream file1("vett.txt");
ofstream save("ris.txt");
while(!file.eof())
{

if(coda!=codv[j])
{
j++;
if(file1.eof())
{
save<<coda;
i++;
j=0;
if((file1.eof()) and (file.eof()))
{
cout<<("programma finito");
}
}
}
else
{
i++;
j=0;
}
}
file.close();
file1.close();
save.close();
system("pause");
}

Sono in panico non riesco a farla mi aiutate??

21 Risposte

  • Re: Confronto tra 2 file

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <stdlib.h>
    #include <vector>
    int main()
    {
    	std::ifstream B("B.txt");
    	std::vector<int> bNumbers;
    	std::string line;
    	while (std::getline(B, line))
    	{
    		int number = std::atoi(line.c_str());
    		bNumbers.push_back(number);
    	}
    	B.close();
    	std::ifstream A("A.txt");
    	std::ofstream C("C.txt");
    	line.clear();
    	while (std::getline(A, line))
    	{
    		int number = atoi(line.c_str());
    		bool isInside = false;
    		for (std::size_t i = 0; i<bNumbers.size(); i++)
    		{
    			if (number == bNumbers.at(i))
    			{
    				isInside = true;
    				break;
    			}
    		}
    		if (!isInside)
    			C << std::to_string(number) << "\n";
    		else
    			isInside = false;
    	}
    	A.close();
    	C.close();
    	system("pause");
    }
  • Re: Confronto tra 2 file

    Ciao grazie per la risposta, ma quando lo compilo mi da questi errori:
    14 `bNumber' undeclared (first use this function)
    27 `to_string' is not a member of `std'

    come devo risolverli?
  • Re: Confronto tra 2 file

    Risolvere l'esercizio per l'utente è contro il regolamento e il buon senso. Quindi è meglio spiegarli come si fa invece di farlo a posto suo.
  • Re: Confronto tra 2 file

    Il prof ha corretto l'esercizio, ma non l'ho capito... non me lo puoi far vedere risolto con le spiegazioni?
    te ne sarei grato
  • Re: Confronto tra 2 file

    Mostra il codice con le correzioni del professore che te le spieghiamo ...
  • Re: Confronto tra 2 file

    #include <iostream>
    #include <fstream>
    #include <string.h>
    #include <vector>
    using namespace std;
     
    int main() {
            vector<string> contenuto_a;
            vector<string> contenuto_b;
            bool trovato = false;
           
            ifstream a, b;
            ofstream c;
            a.open("a.txt");
            b.open("b.txt");
            c.open("c.txt");
           
            while(!a.eof()) {
            string temp;
            getline(a,temp);
            contenuto_a.push_back(temp);
        }
       
        while(!b.eof()) {
            string temp;
            getline(b,temp);
            contenuto_b.push_back(temp);
        }
       
       
        cout << contenuto_a.size() << "   " << contenuto_b.size() << "\n";
        a.close();
        b.close();
       
        c.flush();
       
        for(int k=0; k< contenuto_a.size(); k++) {
            trovato = false;
            for(int i=k;i< contenuto_b.size(); i++)
                    if(strcmp(contenuto_a.at(k).c_str(), contenuto_b.at(i).c_str()) == 0) {
                            trovato = true; break;
        }
        if(!trovato) c << contenuto_a.at(k) << "\n";
    }
                           
            c.close();
            system("pause");
    }
    
    ma ha qualche problema cioè se incontra due numeri uguali nei file a e b me li copia nel file C.txt per questo volevo capire l'altro codice, cioè ho provato a mettere 100 numeri ed alcuni me li salta come se non li avesse confrontati
  • Re: Confronto tra 2 file

    Avevi detto che il professore l'aveva corretto e lo volevi spiegato, non che avevi un codice non funzionante.
  • Re: Confronto tra 2 file

    Questo codice è funzionante se lo provi con gli esempi va una meraviglia, quindi per lui funziona, ma se metti 100- 1000 numeri in entrambi i file alcuni li salta... Per il mio prof va bene il programma e non vuole dare ulteriori spiegazioni... ma vorrei capire dove sbaglia il suo programma oppure se mi spieghi quello sopra capisco le differenze...
  • Re: Confronto tra 2 file

    Sei in grado di fornire due file di dati per cui si verifica il problema e indicare con precisioni in quali valori si verifica?
  • Re: Confronto tra 2 file

    Certo scrivo qualche codice:
    BBK00955673
    CK24126125
    CK23617228
    WDB0045741H
    GZMH009639P
    BMP0173461N

    questo sono i file li ho zippati: https://www.dropbox.com/s/ow5oj3bpgsb8gww/Desktop.zip?dl=0
  • Re: Confronto tra 2 file

    Deve essere

    for(int i=0; i<contenuto_b.size(); i++)

    e non

    for(int i=k; i<contenuto_b.size(); i++)
  • Re: Confronto tra 2 file

    Non va ho messo i=0, ma mi da 3 codici in più!
    #include <iostream>
    #include <fstream>
    #include <string.h>
    #include <vector>
    using namespace std;
     
    int main() {
            vector<string> contenuto_a;
            vector<string> contenuto_b;
            bool trovato = false;
           
            ifstream a, b;
            ofstream c;
            a.open("a.txt");
            b.open("b.txt");
            c.open("c.txt");
           
            while(!a.eof()) {
            string temp;
            getline(a,temp);
            contenuto_a.push_back(temp);
        }
       
        while(!b.eof()) {
            string temp;
            getline(b,temp);
            contenuto_b.push_back(temp);
        }
       
       
        cout << contenuto_a.size() << "   " << contenuto_b.size() << "\n";
        a.close();
        b.close();
       
        c.flush();
       
        for(int k=0; k< contenuto_a.size(); k++) {
            trovato = false;
            for(int i=0;i< contenuto_b.size(); i++)
                    if(strcmp(contenuto_a.at(k).c_str(), contenuto_b.at(i).c_str()) == 0) {
                            trovato = true; break;
        }
        if(!trovato) c << contenuto_a.at(k) << "\n";
    }
                           
            c.close();
            system("pause");
    }
  • Re: Confronto tra 2 file

    Quali codici in più?
  • Re: Confronto tra 2 file

    Non migliora il risultato se metto i=0, mi hanno dato dei codici alfanumerici 25000 nel file A e 87000 nel file B ora il file C dovrebbe essere: i codici del file A se NON sono presenti in b li copio in c... invece il programma mi copia anche codici che sono in b alcuni li elimina altri no
Devi accedere o registrarti per scrivere nel forum
21 risposte