Frage

Angenommen, ich habe eine Textdatei mit der Aufschrift:Diese Datei hat einen einfachen Text

Jetzt möchte ich diese Textdatei in 'n' Anzahl von Teilen mit gleichen Zeichen teilen. Angenommen, der Benutzer möchte drei Abteilungen, dann sollte 1.TXT, 2.TXT und 3.TXT erstellt werden, mit jeweils etwa 8 Zeichen.

(Der nächste Teil dieses Programms besteht darin, diese Dateien wieder in den ursprünglichen Status zurückzuversetzen, aber ich bin sicher, dass ich das selbst tun werde, wenn ich Hilfe bei diesem ersten Teil bekommen kann).

Könnt ihr mich in dieser Angelegenheit führen?

Die verwendete Sprache ist C.

void main(int argc, char** argv)
{
int iChunkNo=0;
char cFileName[30];

iChunkNo = atoi(argv[2]);
strcpy(cFileName, argv[1]);

printf("The file will be divided into %d chunks \n", iChunkNo);

FILE* file_read_pointer;
file_read_pointer = fopen(cFileName, "r");

int iCount=0;
char ch;

while (1) 
{
        ch = fgetc(file_read_pointer);
        if (ch == EOF)
            break;
        ++iCount;
}

printf("The number of characters in the file is: %d \n", iCount);   

int iCharPerFile = 0;
iCharPerFile = iCount/iChunkNo;

printf("The number of characters per chunk file will be: %d \n", iCharPerFile);

FILE* file_write_pointer;   

int j=1;
for(j; j<=iChunkNo; j++)
{   
    char num[5] = {j};
    char ext[4] = {"txt"};

    char name[15];
    sprintf(name, "%d.%s", j, ext);     

    FILE* file_write_pointer;
    file_write_pointer = fopen(name, "w");
}

int i=0;

for(i; i<iCharPerFile; i++)
{
    char temp;
    temp = fgetc(file_read_pointer);
    //fputc(temp, file_write_pointer);
    fprintf(file_write_pointer, "%c", temp);
}
}
War es hilfreich?

Lösung

Sie könnten so etwas tun:

  • Finden Sie die Größe der Datei (verwenden Sie fseek und ftell). Dann kehren Sie zum Anfang zurück
  • Bestimmen Sie die Größe, die Sie für jede Datei schreiben müssen (Größe / n)
  • Lesen Sie jeweils einen Charakter (verwenden Sie getc) und schreiben in die entsprechende Datei (putc)
    • Verwenden sprintf(fname, "%d.txt", index) Namen wie "1.txt" zu erstellen
    • Verwenden fopen Dateien zu öffnen und a zu behalten FILE *current worauf Sie bei jedem Schritt schreiben

Davon abgesehen sollten Sie langsam anfangen. Machen Sie zuerst ein Programm, das einfach eine Datei mithilfe einer Datei kopiert getc + putc und arbeite dich nach oben.

Andere Tipps

Sie müssen herausfinden, wie viel Text insgesamt vorhanden ist, möglicherweise durch "Schlürfen" der gesamten Datei in den Speicher. Dies funktioniert gut für Dateigrößen bis zu Megabyte in Größe, jedoch nicht für Gigabyte und darüber hinaus.

Dann müssen Sie wissen, wie viele Teile es in (Befehlszeilenargumentverarbeitung?) Und daher, wie viele Daten zum Schreiben an jeden Teil schreiben können. Darauf folgt das Erstellen der einzelnen Ausgabedateien, das Schreiben des richtigen Datensegments in die Datei und Schließen.

Angenommen, die Datei hat 29 Bytes und Sie müssen sie in 3 Teilen teilen. Erstellen Sie 2 Teile mit 9 Bytes und einer mit 11 oder 2 mit 10 und einer mit 9. Was ist, wenn es 28 Bytes lang und 5 Teile ist? (4 x 5 Bytes + 1 x 8 Bytes? 3 x 6 Bytes + 2 x 5 Bytes? Oder ist das 2 x 5 Bytes + 3 x 6 Bytes?)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top