Hilfe gebraucht, dringend : Unterteilung von Datei in C

Dieses Thema im Forum "C/C++" wurde erstellt von lord, 18.06.2006.

  1. lord

    lord Grünschnabel

    Dabei seit:
    18.06.2006
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo,


    Ich habe solche Aufgabe:

    Gegeben seien 3 Dateien (txt-Dateien, erste hat 0,95 Mb, zweite auch 0,95 Mb und dritte 16 B)
    Der Algorithmus unterteilt jede Datei in 16 gleiche Blöcke. Man darf voraussetzen, dass alle drei Dateien ohne Rest durch 16 teilbar sind. Zunächst wird ein Block eingelesen.

    Meine Fragen:
    1.Wie kann man unter C eine solche Datei in Blöcke teilen.
    2. ...und wenn man schon diese Dateien unterteilt hat, wie kann man später im Programm auf diesen Blöcken zugreifen um weitere Operationen auf diesen Blöcken durchzuführen.

    MfG.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 hazelnoot, 18.06.2006
    hazelnoot

    hazelnoot www.mywm.dl.am

    Dabei seit:
    13.10.2005
    Beiträge:
    377
    Zustimmungen:
    0
    Ort:
    in Geiersberg
    ich versteh nicht ganz wie "in 16 teile aufteilen" sollen aus diesen dateien 16 gleich grosse dateien werden oder wie? oder wie stellst du dir die teilung vor?

    mfg hazelnoot!
     
  4. #3 root1992, 18.06.2006
    Zuletzt bearbeitet: 18.06.2006
    root1992

    root1992 von IT-Lehrern besessen

    Dabei seit:
    02.01.2006
    Beiträge:
    1.138
    Zustimmungen:
    0
    Ort:
    Märchenwald
    Vieleicht wenn du die ganze Datei in einen StrinArray einliest, dann die Arraygröße ermittelst und dann durch 16 Teilst und jeden Teil dann mit einer Schleife ausgibst.

    Meine persöhnliche Frage: Sinn???


    //EDIT:
    Oder versuchsmal mit fgetf() da kannst du angeben, wieviel Zeichen er dann einliest.
     
  5. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Datei einlesen; String in Teile zerlegen, die jeweilst sizeof(string)/16 Zeichen lang sind und in Variablen oder einem Array ablegen. Zugriff wie ueblich auf Variablen oder Arrays. Sinn ist mir allerdings auch nicht klar.
     
  6. lord

    lord Grünschnabel

    Dabei seit:
    18.06.2006
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo,

    Also noch ein mal: gegeben seien 3 Deteien, aber betrachten wir jetzt nur eine.

    Es gibt Datei die 1000000 Bajts hat, in dieser Datei wurde die Zahlen eingeschrieben, also 1000000 Zahlen. Jetzt muß ich diese Datei in 16 gleiche Blöcke verteilen, also jeder Block hat nach Verteilung 62500 Bajts (Zahlen), und jetzt habe ich 16 gleiche Blocke mit jeweils 62500 Bajts.

    Meine Frage:
    1. Wie kann ich diese Datei auf 16 gleichen Blöcke teilen verteilen.
    2. Wie kann ich später auf diese Datei zugreifen um weitere Operationen auf diesen Deteien durchzuführen.

    Beispiele gern gesehen.

    MfG

    <Lord>
     
  7. #6 supersucker, 19.06.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    1. Kann mit deiner Erklärung hier keiner was anfangen.
    WTF meinst du denn mit Blöcken?

    2. Wurden dir oben schon erklärt was du machen musst.
     
  8. lord

    lord Grünschnabel

    Dabei seit:
    18.06.2006
    Beiträge:
    5
    Zustimmungen:
    0
    Das ist meine ganze Aufgabe die ich lösen muß:

    Gegeben seien drei Dateien(txt-Dateien, erste hat 0.95 Mb, zweite 0.95 Mb, und dritte hat 16 Bajts), für die eine Prüfsumme errechnet werden soll. Zu diesem Zweck soll ein eigens entwickelter Hash-Algorithmus eingesetzt werden.

    Spezifikation

    Der Algorithmus unterteilt jede Datei in 16 gleiche Blöcke. Sie dürfen voraussetzen, dass alle drei Dateien ohne Rest durch 16 teilbar sind. Zunächst wird ein Block eingelesen. Die Zeichen der eingelesenen Datei werden dabei als ASCII-Zeichen interpretiert. Das eingelesene Zeichen ‘A’ würde also als Wert 65 interpretiert usw. Anschließend werden alle ASCII-Werte addiert. Ein Block aus den ASCII-Zeichen {1, 2, 3, 4, 5} würde also das Ergebnis 1+2+3+4+5 = 15 erzeugen. Dieses Ergebnis ist aber noch mehrstellig. Erst wenn es einstellig ist, wurde der Hash-Wert für diesen Block fertig berechnet. Nun muss also 1+5 gerechnet werden (= 6). Beachten Sie, dass in diesem Schritt nicht mehr die ASCII-Werte zur Berechnung genutzt werden, sondern die tatsächlichen Zahlenwerte. Da diese Zahl nun nicht mehr mehrstellig ist, ist sie der Hash-Wert für diesen Block. Diese Prozedur wird nun für alle Blöcke wiederholt. Schlussendlich erhalten Sie also eine Liste aus 16 Ziffern. Dieser Ziffernblock stellt die Prüfsumme für die geprüfte Datei dar.

    Ein Teil der Aufgabe hab ich schon gelöst, brauche aber jetzt ne hinweise.
    Ich hab keine Ahnung wie ich diese Dateien in 16 gleiche Blöcke in C verteilen kann und wie später auf diesen Blöcke zugreifen kann.

    MfG
    lord
     
  9. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Ohje, wir sind doch hier keine Hausaufgabenhilfe. Wie willst du denn was lernen, wenn du dir alles vorsetzen laesst? Lass die graue Masse also einfach mal etwas brodeln. Loesungsansaetze wurden dir hier ausreichend geliefert.
     
  10. lord

    lord Grünschnabel

    Dabei seit:
    18.06.2006
    Beiträge:
    5
    Zustimmungen:
    0
    Danke für Links,

    aber wie ich schon gesagt habe ich will nicht damit jemand meine ganze aufgabe
    löst, ein Teil dieser Aufagbe hab ich schon geloest, jetzt brauche ich nur die Hinweise wie ich die Datei in Blöcke verteilen kann.

    Ich hab mich entschieden, hier mein Problem vorzustellen, weil ich wenig Zeit habe um meine Aufgabe zu lösen. Das bedeutet aber nicht dass ich meine Aufgabe nicht selbst aufzulösen versuche.

    MfG
     
  11. #10 slasher, 19.06.2006
    slasher

    slasher König

    Dabei seit:
    22.03.2006
    Beiträge:
    827
    Zustimmungen:
    0
    dann zeig uns doch mal deine Versuche :-).
     
  12. lord

    lord Grünschnabel

    Dabei seit:
    18.06.2006
    Beiträge:
    5
    Zustimmungen:
    0
    Warum soll ich das zeigen, ist das ne Prüfung oder was.
    Wenn Du mir Helfen willst oder kannst, einfach schreib nichts.
    Außerdem wenn ich wollte damit jemand mir diese ganze Aufgabe auflöst, würde ich einfach darum gebetten.
    Ich brachu nur eine Hinweise (steht oben) und nichts mehr.
     
  13. #12 Wolfgang, 19.06.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Ich denke, dass du die Aufgabe nicht richtig verstanden hast.
    Stoß dich doch nicht an dem Begriff Block. Der wird hier doch nur verwendet, um den Prüfsummenalgorithmus zu definieren. Das meint nur, wieviele Daten für die Berechnung einer der 16 Ziffern der Prüfsumme verwendet werden sollen.
    Also ist dir damit vorgegeben, wie lang dein String sein soll.
    Wie du programmtechnisch deine Stringlänge bastelst, ist dir selbst überlassen. Das geht über Array, oder Stringlänge oder eigene Typendefinition oder...
    Block ist also nix weiter als eine Datenmenge in Byte, die du häppchenweise zu Verarbeitung heranziehst.
    :headup:

    Gruß Wolfgang
     
  14. #13 supersucker, 19.06.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Du hast da was falsch verstanden.

    Es geht darum das du uns zeigst was du bisher gemacht, und wir dann kucken wo es hakt.

    Das mit dem "zeig mal was du gemacht hast" war also mehr oder weniger nett gemeint.
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Du legst 16 Behaelter an, in die Du Deine Dateitypen speichern willst, an. Unter C++ z.B. 'std::vector<int> behaelter[16]'
    Dann liest Du die Daten der Reihe nach ein. Entweder, Du zaehlst zuerst, wieviele Daten in der Datei sind, teilst das durch 16 und fuellst dann einen Behaelter nach dem anderen. Oder Du laesst z.B. einen Zaehler mitlaufen und machst dann sowas wie
    'my_input >> behaelter[counter%16];'
    Ist wahrscheinlich nicht das schnellst, doch bei 10^6 Zahlen wird das nicht lange dauern.
     
  17. #15 hazelnoot, 19.06.2006
    Zuletzt bearbeitet: 19.06.2006
    hazelnoot

    hazelnoot www.mywm.dl.am

    Dabei seit:
    13.10.2005
    Beiträge:
    377
    Zustimmungen:
    0
    Ort:
    in Geiersberg
    also so koenntest du eventl die bloecke aufsplitten:
    (ps nicht getestet aber es is mal ein vorschlag:)
    Code:
    /*generates the hash code from a file*/
    
    #include <stdio.h>
    #include <sys/stat.h>
    #include <stdlib.h>
    
    #define FILENAME "/home/badbackslash/C/LinuxUnixHacking/HASH/test.test"
    #define BLOCKNUM 16
    
    
    /*get the size of the file*/
    int getFileSize(char *filename){
        struct stat sizeStruct;
        
        if( stat(filename, &sizeStruct) == -1){
            return -1;
        }else{
            return sizeStruct.st_size;
        }
    }
    
    
    int main(void){
        /*size vars*/
        int fileSize;
        int blockSize;
    
        /*runvar*/
        int i;
    
        /*the blocks*/
        char **blocks;
    
        /*etc*/
        char bufferChar;
        int aktBlock;
        
        /*read the file*/
        FILE *input = fopen(FILENAME, "r");
        
        /*check if the file is open*/
        if(input == NULL){
            printf("konnte file nicht oeffnen!\n");
            return -1;
        }
    
        /*get the size of the file*/
        fileSize = getFileSize(FILENAME);
        
        /*get the size for one block*/
        blockSize = fileSize / BLOCKNUM;
    
        /*allocate the space for the 16 blocks*/
        blocks = (char **)malloc(BLOCKNUM * sizeof(char *));
    
        /*allocate the space for one block and addit to the mainblockspace*/
        for(i = 0; i < BLOCKNUM; i++){
            blocks[i] = (char *)malloc(blockSize * sizeof(char));
        }
    
        /*read the file and write it to the array*/
        i = 0;
        aktBlock = 0;
        while( (bufferChar=fgetc(input)) != EOF){
            /*ad the buffer char to the aktBlock at the aktPosition*/
            blocks[aktBlock][i] = bufferChar;
            
            /*aktualize the aktBlock var*/
            if(i == blockSize){
                printf("%d\n", aktBlock);
                aktBlock++;
                i = 0;
            }
            if(aktBlock == BLOCKNUM){
                break;
            }
            i++;
        }
        
        /*create the has code for every container!!!*/
    
        /* free the allocated space */
        for(i = 0; i < BLOCKNUM; i++)
            free(blocks[i]);
       
        free(blocks);
    
        /*close the file*/
        fclose(input);
    }/*end main*/
    
    
    so und hier nochmal das ganze programm: http://hazelnoot.ha.funpic.de/hash.c /*weis aber nicht obs wirklich funkt sieht aber ganz gut aus*/
     
Thema:

Hilfe gebraucht, dringend : Unterteilung von Datei in C

Die Seite wird geladen...

Hilfe gebraucht, dringend : Unterteilung von Datei in C - Ähnliche Themen

  1. BackTrack3 Live CD Hilfe gebraucht

    BackTrack3 Live CD Hilfe gebraucht: Hab mir BackTrack 3 Live Cd gezogen und gebrannt....das Problem jetzt nach dem Booten mit der Live CD aufm meinen...
  2. Hilfe.

    Hilfe.: Hallo ich habe centos 7.2.15.11 Ich habe die .rpm Dateien von Epson direkt installiert, aber sonst nichts. Nachdem ich im Terminal...
  3. Bräuchte Hilfe bei Backupscript mittels Bash und cronjob

    Bräuchte Hilfe bei Backupscript mittels Bash und cronjob: Es soll für bestimmte Ordner Archivierung aller Dateien(Logfiles), die älter als 30 Tage sind machen. Am besten einmal täglich nachts irgendwann....
  4. [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

    [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter: Hallo zusammen, ich bin an einem Punkt angekommen, wo ich nicht mehr weiter komme und hoffe ihr könnt mir weiter helfen. Anbei ein Ausschnitt aus...
  5. Benötige Hilfe- Dateien vergleichen

    Benötige Hilfe- Dateien vergleichen: Hallo, für eine Arbeit an der Uni muss ich einige viele Bilder miteinander vergleichen, was ich gerne durch eine Automatisierung etwas...