Découper un fichier texte ....en plusiers elements
plusieurs autres choix ...
nombre de lignes par fichier
noms des fichiers de desti " nomfichier000 - XXX
recopie la premiere ligne de la source dans chaque fichier ou non
et a chaque relance du prog .. renom le fichier 000 en nom de source et le 001 en 000 ext ....
une partie est un peut detaille .. mais le reste est en vrac ... ;-) .. mais peut etre utile .. pour les nuls comme moi .. ;-) il y a plein de fautes .. mais il marche bien .. (pour mon usage )
...
Source / Exemple :
#include <stdio.h>
#include <conio.h>
#include <io.h>
#include <string.h>
#include <stdlib.h>
#include <direct.h>
#include <ctype.h>
#define LISTE "list.big"
#define cleanner "\033[2J"
void creeliste (char [64], char[64]);
void copyfiles (void);
int comptligne(char [64]);
void main( void )
{
FILE *streamD;
FILE *stream;
char line[100];
char entete[100]={0};
int loops;
char Adress[64];
char AdressD[64];
char AdressDE[64];
char AdressDD[64];
char rep[64];
int nblignes;
int nbfiles=0;
int nb_ligness=1;
printf ("by remybig@fr.st\n\n");
// recherche repertoire courant
if( _getcwd( rep, 64 ) == NULL )
perror( "erreur sur directory" );
else
//ajoute '\' a la fin du repertoir
strcat(rep,"\\");
printf ("\nRepertoir de travail. ");
printf( "\n%s\n", rep );
if (access(LISTE,00)!=0 )
{
// saisie des parametres
printf ("\nsaisir le nom du fichier a decouper ex : nom.ext : ");
scanf ("%s",&Adress);
printf ("\nsaisir le nom du fichier de destination ex : nom sans ext : ");
scanf ("%s",&AdressD);
printf("\nChemin de la source : %s \n",Adress);
getch();
// cree chemin de dest et source
printf("\nChemin de la dest : %s--- \n",AdressD);
getch();
strcpy(AdressDE,AdressD);
//compte le nombre de lignes dans le fichier
nb_ligness = comptligne(Adress);
// ouvre source
if ((stream = fopen( Adress, "r" )) != NULL )
{
do
{
printf("\n\nVotre fichier comporte %d lignes \n \n", nb_ligness);
printf ("\nnb de lignes par fichier de dest maxi ...100 fichiers : ");
scanf ("%d",&nblignes);
if (nblignes ==0)
nblignes= 1; // si erreur de saisie 1 fichier minimum
printf ("\n\t nombres de fichiers crees : %d",nb_ligness/nblignes);
}while ((nb_ligness/nblignes)>100);
fclose( stream ); // ferme la source pour la reouvrir
}
else
printf ("\nerreur fichier inexistant. \a");
if ((stream = fopen( Adress, "r" )) != NULL )
{
printf ("\n\nVoulez vous recopier la premiere ligne sur tous les fichiers . N/n ");
printf( "\n%s\n",entete);
if ( toupper(getch())!='N')
{
// copie entete fichier source
fgets( entete, 100, stream );
}
// met a jour fichier de liste
creeliste(LISTE,Adress);
do
{
// cree le nom du fichier dest
itoa(nbfiles,AdressDD,10);
strcpy(AdressD,AdressDE);
strcat(AdressD,AdressDD);
nbfiles++;
// cree et ouvre le fichier dest
if ((streamD = fopen( AdressD, "w" )) != NULL )
{
// incert l'entete
fputs( entete, streamD );
// met a jour fichier de liste
creeliste(LISTE,AdressD);
// copy les ..n ligne dans dest
for (loops=1;(loops <=nblignes);loops++)
{
if( feof( stream )) // si fichie source fini .on quite la boucle
break;
fgets( line, 100, stream );
printf( "%s",line);
fputs( line, streamD );
}
fclose( streamD ); // ferme la .. n source
}
}while ( !feof( stream )); //control si source fini
fclose( stream ); // ferme la source
strcpy(AdressD,Adress);
strcat(AdressD,".old"); //renom la source
rename( Adress, AdressD );
}
}
else
copyfiles ();
}
//************************************************************************************
void creeliste(char path[64],char adrevari[64])
{
FILE *streamListe;
char buff[64]={0};
//ecrit le chemin complet de chaque fichier
strcpy(buff,"\"");
strcat(buff,adrevari);
strcat(buff,"\"\n");
// ecrit chaque ligne dans le fichier "list"
if ((streamListe = fopen( path, "a" )) != NULL )
{
fputs( buff, streamListe );
fputs( "\0", streamListe );
}
fclose( streamListe );
}
//********************************************************************************
int comptligne(char FileVari [64])
{
FILE *streamVari;
char C;
int BbLiGnE=1;
if ((streamVari = fopen( FileVari, "r" )) != NULL )
{
do
{
C=fgetc(streamVari);
if (C=='\n')
BbLiGnE++;
}while (C!=EOF); // tant qu'on est pas a la fin du fichier
fclose( streamVari );
}
return (BbLiGnE);
}
//**************************************************************************************
void copyfiles (void)
{
FILE *streamlistE;
int NBlignes=0;
int AA;
int TRA;
char BUFline [64]={0};
char BuFFerx [105][64]={0};
char *stok;
//compte les lignes . du moufard
NBlignes = comptligne(LISTE);
//stock les donnée
if ((streamlistE = fopen( LISTE, "r" )) != NULL )
{
for (AA=0;AA<NBlignes-1;AA++)
{
fgets(BUFline,60, streamlistE ); //decoupe les noms par la recherche de "
stok=strtok(BUFline,"\"");
strcpy(BuFFerx[AA],stok);
if(AA!=0)
if (access(BuFFerx[AA],00)== 0)
printf("%s\n",BuFFerx[AA]);
else //visu si erreur
printf("\n\tErreur_BUFFEREX : %d \n",AA);
}
fclose( streamlistE );
}
printf ("\nrename\n");
while (_access(BuFFerx[0],00)!=0)
{
AA=1;
remove( "liste.old"); //si source est toujours la ou pas
if (strcmpi(BuFFerx[AA],"")==0)
{
remove(LISTE);
printf ("\n \t Fin du fichier %s",BuFFerx[0]);//si file de remplacement fini
break;
}
TRA=rename( LISTE, "liste.old" );
for (;AA<=NBlignes-2;AA++) //renom a la volee
{
printf ("rename %s en %s.\n",BuFFerx[AA],BuFFerx[(AA-1)]);
TRA=rename( BuFFerx[AA], BuFFerx[(AA-1)] );
if (_access(BuFFerx[(AA-1)],00)!=-1)
creeliste(LISTE,BuFFerx[(AA-1)]);
if (TRA!= 0)
{
printf ("\nerreur rename fichier %s \n",BuFFerx[AA]);
}
}
};
getch();
}
//*********************************************************************************
Conclusion :
bon a vous de le decouvrir ...
je l'ai fait tourner sous vc ++ et c'est ok ...
il est pas tres etudier au point de vu ressource memoir et acces fichier ..mais bon .. il marche et il peut aider quelqu'un .. de temps en temps ..
bye
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.