Question

Supposons que j'ai un fichier texte qui dit: Ce fichier a le texte brut

Maintenant, je veux diviser ce fichier texte en nombre « n » de pièces avec des personnages égaux. Supposons que l'utilisateur veut trois divisions, puis 1.txt, 2.txt et 3.txt devraient être créés, avec environ 8 caractères chacun.

(La partie suivante de ce programme est de rejoindre ces fichiers dans l'état d'origine, mais je suis sûr que je serai en mesure de le faire moi-même si je peux obtenir de l'aide de cette première partie).

Pouvez-vous les gars me guider dans cette affaire?

Le langage utilisé est 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);
}
}
Était-ce utile?

La solution

Vous pouvez faire quelque chose comme ceci:

  • Trouvez la taille du fichier (en utilisant fseek et ftell). Puis chercher retour au début
  • Déterminez la taille que vous devez écrire à chaque fichier (taille / n)
  • Lire un caractère à la fois (utilisation getc) et écrire dans le fichier correspondant (putc)
    • Utilisez sprintf(fname, "%d.txt", index) aux noms de construction comme "1.txt"
    • Utilisez fopen pour ouvrir des fichiers et de garder un FILE *current auquel vous écrivez à chaque étape

Cela étant dit, vous devriez commencer à ralentir. Tout d'abord faire un programme qui copie simplement un fichier dans un autre en utilisant getc + putc et travailler votre chemin.

Autres conseils

Vous allez avoir besoin de savoir combien il y a du texte au total, peut-être par «siphonage le fichier en mémoire. Cela fonctionne très bien pour la taille des fichiers jusqu'à mégaoctets, mais pas pour les giga-octets et au-delà.

Ensuite, vous devez savoir combien de pièces de le diviser en (traitement des arguments de ligne de commande?), Et donc la quantité de données à écrire pour écrire à chaque partie. Cette étape sera suivie par la création de chacun des fichiers de sortie, l'écriture du segment de droite des données dans le fichier et le fermer.

Supposant le fichier a 29 octets et vous devez le diviser en 3 parties. Allez-vous créer 2 parties avec 9 octets et un avec 11 ou 2 avec 10 et une avec 9. Qu'en est-il si elle est de 28 octets de long et 5 parties? (4 x 5 octets + 1 x 8 octets? 3 x 6 octets + 2 x 5 octets ou est-ce que 2 x 5 octets + 3 x 6 octets?)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top