dateien auslesen_vergleichen_hier stimmt was nicht!?



  • (buffer_1==buffer_2)
    

    ist, soweit ich das erkennen kann etwas kürzer, und dürfte auch schneller als

    (memcmp(buffer_1, buffer_2, 1) != 0))

    ablaufen.

    und falls du das 1. meinst:

    char test[]="";
    
    char test[]="0";
    

    auch hier... mehr schreibaufwand? wohl kaum! speicherplatz? weniger benötigt. (zwar nur 2 bytes, aber ist doch schon ein anfang 😉 )

    mfG (c)h

    PS.: wenn du richtig gemeint, aber falsch bei mir angekommen ist, kannst du die vergleiche ignorieren


  • Mod

    gegen gepuffertes vergleichen ist nichts einzuwenden. aber du must dir dann nat. merken, wieviele bytes im jeweiligen lesevorgang gelesen wurden und nicht nur die totale anzahl (bez. du könntest das auch mit %1024 rekonstruieren).

    size_t read1, read2;
        do
        {
            read1 = fread( buffer1, 1, 1024, fp[ index1 ] );
            read2 = fread( buffer2, 1, 1024, fp[ index1 + 1 ] );
        }
        while( read1 && read1 == read2 && memcmp( buffer1, buffer2, read1 ) == 0 );
        cmp = read1 || read2;
    

    ein initialisieren des puffers ist hier gänzlich unnötig. falls dein algorithmus das erfordern sollte, ist wahrcheinlich ein logikfehler drin 😉



  • also wenn ich dich wäre würde ich so den code den du für 2 dateien hast, einfach in eine schleife packen die etwa so ist..

    int main(....){
    
    for(int counter=0;counter<argc;counter++){
    /*hier dein code*/
    //zu beachten:
    file_1 = argv[counter];
    file_2=argv[counter+1];
    
    //und zum schluss:
    if(nichtgleich){
    prinf("Leider nein");
    return 0;
    }
    }//ende der for
    
    prinf("identisch");
    return 0;
    }//end main
    


  • nickname (höhö, witzbold) schrieb:

    also wenn ich dich wäre würde ich ...

    ... erstmal deutsch lernen? 😃 :p



  • @chille07:

    ich meinte schon die sache mit dem buffer_1...

    aber eines verstehe ich jetzt nicht ganz!
    wenn ich

    if(x[index1] != x[index1+1] || /*(memcmp(buffer_1, buffer_2, 1) != 0 )*/(buffer_1==buffer_2) )
    			cmp = 1;
    

    mache, dann heißt das doch, er setzt cmp auf 1, wenn:

    - die anzahl der von fread eingelesenen zeichen unterschiedlich ist, d.h. die dateien also unterschiedlich lang sind, ODER
    - wenn buffer_1 GLEICH buffer_2 ist!

    aber wenn die beiden buffer gleich sind, soll er doch gerade NICHT cmp auf 1 setzen! oder sollte dein ausdruck mit den buffern woanders hin? sorry, aber ich glaub ich stehe heute morgen noch ein wenig auf dem schlauch!

    danke



  • *g* na dann.. (ich hab übersehen dass du auf ungleich abfragst)
    also:

    if(x[index1] != x[index1+1] || /*(memcmp(buffer_1, buffer_2, 1) != 0 )*/(buffer_1!=buffer_2) )
                cmp = 1;
    

    ist doch auch kein großes problem aus dem == ein != zu machen, oder?

    mfG (c)h



  • auch das hatte ich schon probiert, da testet er wieder falsch!!!
    also lasse ich es, so wie es ist!
    trotzdem danke!



  • [

    memcmp(buffer_1, buffer_2, 1) != 0 )==(buffer_1!=buffer_2)
    

    sind diese aussagen nicht äquivalent?

    mfG (c)h



  • anscheinend nicht, jedenfalls vergleicht er so falsch!



  • @ hotspot
    schau dir source von diff an http://ftp.gnu.org/pub/gnu/diffutils/diffutils-2.8.1.tar.gz
    steht aber unter gpl
    Hier steht sicher alles drin was mit datein vergleich zu tun hat drin! 😃

    mfg


Anmelden zum Antworten