Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » Erstes FloSoft Rätsel

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
28.03.2004, 14:52 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


In Ordnung, ich hoffe ich kanns gut genug beschreiben

Also,
2 Binärdateien werden verglichen, die Position und Länge der Änderung soll dann ausgegeben werden, z.b so:


Code:
Datei1 wird verglichen mit Datei2
Datei2 unterscheidet sich an folgenden Stellen:
Byte 45, Länge der Abweichung 30 Bytes
  00 04 05 06 07 aa 04 05 06 07 00 04 75 a6 d7 07
  00 a4 05 f6 07 ff 04 85 06 07 40 34 05 06
Byte 140, Länge der Abweichung 4 Bytes
  50 ff a4 3b
Byte 180, Länge der Abweichung 140 Bytes
  ...



Verglichen werden sollen natürlich nur ähnliche dateien.

Gewinner ist der, welcher zwei 100MB große Dateien am schnellsten und mit dem speicherärmsten Code vergleicht.

Die Ausgabe kann entweder in eine weitere Datei oder eben auf die Konsole erfolgen.
--
class God : public ChuckNorris { };

Dieser Post wurde am 28.03.2004 um 14:55 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.03.2004, 15:09 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hmm wenn mas besonders speicherarm machen will würde man immer nur ein byte lesen und mit hilfe von merkern was machen...führt dazu das der spass dann arschlangsam wird wenn man da mit 100 MB dateien arbeitet aber man ist besonders speicherschonend weil man ja jedes char einzeln liest...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 28.03.2004 um 15:10 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.03.2004, 15:41 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das ist ja die schwierigkeit bei der aufgabe, die richtige "mischung" zu finden
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.03.2004, 20:09 Uhr
erpelqueen
Entlein


is ja hart.
würde mich mal interessieren, hab selber aber leider keine idee.
wie auch...
--
TSchöööööööö ,
How dy How, Ranger Joe
--------------------------------------
www.erpelstore.de.vu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.03.2004, 12:47 Uhr
kronos
Quotenfisch
(Operator)


mal ganz unbedarf dahingecodet:

C++:
#include <stdio.h>
#define OUTPUT stdout

main(int args, char**arg)
{
    if(args<3)
    {
    printf("Anwendung: %s Datei1 Datei2",*arg);
    return -1;
    }
    else
    {
        FILE *file1, *file2;
        if((file1=fopen(arg[1],"rb"))==NULL)
        {
        printf("Fehler beim Öffnen von %s!",arg[1]);
        return -1;
        }
        
        if((file2=fopen(arg[2],"rb"))==NULL)
        {
        printf("Fehler beim Öffnen von %s!",arg[2]);
        return -1;
        }

        fprintf(OUTPUT,"Vergleich von %s und %s:\n",arg[1],arg[2]);
        {
        int c1=fgetc(file1),c2=fgetc(file2);
        unsigned long n=0;
        while(c1>0||c2>0)
        {
            if(c1!=c2)
            {
            unsigned long l;
            for(l=0;c1!=c2;++l)
            {
                c1=fgetc(file1);
                  c2=fgetc(file2);
            }
            fprintf(OUTPUT,"Abweichung bei Byte %i, Länge %i:\n",n,l);
            fsetpos(file1,(fpos_t*)&n);
            fsetpos(file2,(fpos_t*)&n);
            for(;l--;++n)
            {
                    c1=fgetc(file1);
                  c2=fgetc(file2);
                fprintf(OUTPUT,c1<0?"-- ":"%02x ",c1);
                    fprintf(OUTPUT,c2<0?"--\n":"%02x\n",c2);
            }
            }
            else
            ++n;
                c1=fgetc(file1);
            c2=fgetc(file2);
        }
        }
        fprintf(OUTPUT,"Vergleichen beendet.\n");
    }
}



falls ein file zu ende ist, gilt das als abweichung und es wird "--" statt den bytes angezeigt, hoffe das ist in deinem sinne.
oh, mir fällt gerade ein das das programm durch die int-größe beschränkt ist, wird also nix mit 100mb...


Bearbeitung:
smilies vernichtet

[edit]Flos Beanstandungen behoben[/cpp]
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 30.03.2004 um 13:14 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.03.2004, 13:06 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Ganz funktioniert es scheinbar noch nicht:

1. wird die Ausgabe nicht nach dem 16ten Byte umgebrochen sondern schon nach dem 2ten (nicht so schlimm)
2. werden die Bytes nicht in hex sondern dezimal ausgegeben (auch nicht so schlimm)
3. werden die Bytes nicht korrekt ausgegeben, Beispiel:

Datei a 4 Bytes: blah
Datei b 4 Bytes: bla2

Ausgabe:
Abweichung bei Byte 3, Länge 1:
102 50

Warum gibt er da 2 Bytes aus? Er dürfte nur 1 Byte ausgeben.

Ansonsten, von der Geschwindigkeit ist es 1a, Speicherbelastung so gut wie null. Nicht schlecht.

Die Fehler lassen sich ja beheben

Wenn keine weiteren Vorschläge bis zum Wochenende kommen wirst du wohl der gewinner sein
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
30.03.2004, 13:09 Uhr
kronos
Quotenfisch
(Operator)


hi flo!
das linke byte ist aus file1, das rechte aus file2.
den rest habe ich behoben, mit unsigned long kannst du nun auch bis zu ~4GB vergleichen...
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 30.03.2004 um 13:15 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
30.03.2004, 14:55 Uhr
erpelqueen
Entlein


mal ne frage: was hat man davon???
--
TSchöööööööö ,
How dy How, Ranger Joe
--------------------------------------
www.erpelstore.de.vu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
30.03.2004, 15:22 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Was man davon hat?
Nun ja, siehe hier: www.fun-soft.de/showtopic.php?threadid=6569


Auf die elegante Lösung von kronos wäre ich nicht gekommen, meine sah etwas sch*** aus und war recht langsam.

(ich hatte mal wieder viel zu kompliziert und umständlich gedacht )
--
class God : public ChuckNorris { };

Dieser Post wurde am 30.03.2004 um 15:23 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
30.03.2004, 17:16 Uhr
kronos
Quotenfisch
(Operator)



Zitat:
erpelqueen postete
mal ne frage: was hat man davon???

meinst du davon die rätsel zu lösen? oder den sinn des programms?

flosoft: freut mich wenn ich dir helfen konnte, den thread hab' ich nicht gesehen, da ich die kategorie nicht lese...
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 30.03.2004 um 17:19 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Rätselecke ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: