Domanda

Supponiamo di avere un file di testo che dice:Questo file ha un testo semplice

Ora, voglio dividere questo file di testo in un numero di parti con caratteri uguali. Supponiamo che l'utente desideri tre divisioni, quindi 1.txt, 2.txt e 3.txt dovrebbero essere creati, con circa 8 caratteri ciascuno.

(La parte successiva di questo programma è di ricongiungersi a questi file nello stato originale, ma sono sicuro che sarò in grado di farlo da solo se posso ottenere aiuto con questa prima parte).

Ragazzi, potete guidarmi in questa materia?

La lingua usata è 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);
}
}
È stato utile?

Soluzione

Potresti fare qualcosa del genere:

  • Trova le dimensioni del file (usando fseek e ftell). Quindi cerca di nuovo all'inizio
  • Determina la dimensione che è necessario scrivere su ciascun file (dimensione / n)
  • Leggi un personaggio alla volta (usa getc) e scrivere al file corrispondente (putc)
    • Uso sprintf(fname, "%d.txt", index) per creare nomi come "1.txt"
    • Uso fopen per aprire i file e mantenere un FILE *current a cui scrivi ad ogni passaggio

Detto questo, dovresti iniziare lentamente. Prima crea un programma che copia semplicemente un file in un altro usando getc + putc e salire su.

Altri suggerimenti

Avrai bisogno di capire quanto testo c'è in totale, possibilmente "branduo" l'intero file in memoria. Funzionerà bene per dimensioni di file fino a megabyte di dimensioni, ma non per gigabyte e oltre.

Quindi devi sapere quante parti dividerlo in (elaborazione dell'argomento della riga di comando?), E quindi quanti dati scrivere per scrivere su ciascuna parte. Questo sarà seguito dalla creazione di ciascuno dei file di output, scrivendo il giusto segmento di dati nel file e chiuderli.

Supponendo che il file abbia 29 byte e devi dividerlo in 3 parti. Creerai 2 parti con 9 byte e una con 11 o 2 con 10 e una con 9. Che ne dici se è lungo 28 byte e 5 parti? (4 x 5 byte + 1 x 8 byte? 3 x 6 byte + 2 x 5 byte? O sono 2 x 5 byte + 3 x 6 byte?)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top