begin process at 2010 02 09 21:48:58
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caractères

 > SYSTÈME DE DÉCOUPE DE FICHIER

SYSTÈME DE DÉCOUPE DE FICHIER


 Description

C'est un petit programme qui permet de découper "proprement" un  fichier de plusieurs mégas qui a été formaté comme suit:
On a une liste d'informations dans ce fichier et on peut trouver une redondance ( un mot, un nombre) qui sert de séparateur.
Prenons un exemple :
On a des détails sur plusieurs sociétés dans un même fichier et au début de chaque détail sur une société se trouve un mot séparateur (que l'on va nommer "mot"). A chaque fois que l'on rencontre le mot "mot", cela signifie que le fichier "va traiter" une nouvelle société.

Source

  • /*****************************
  • ******************************
  • ******* Oz ********************
  • *** Découpe de fichier ***********
  • *****************************
  • *****************************
  • *****************************/
  • #include <sys/types.h>
  • #include <fcntl.h>
  • #include <unistd.h>
  • #include <stdio.h>
  • #include <stdlib.h>
  • #include <string.h>
  • //definition de la taille du tampon
  • #define TAILLE_BUF 1024
  • #define INTSIZE 10
  • /***
  • **** Ce programme decoupe un fichier en plusieurs petits fichiers de la manière que suit:
  • On lui di de faire cette decoule toute les "ligne" ligne, il va jusque cette ligne, il cherche la fin des infos de la societe en cours et créé un nouveau fichier avec ces infos, et il continu jusque la fin du "gros" fichier.
  • ****/
  • /**************************************************
  • ***** Fonction qui change un int en string... *****
  • **************************************************/
  • char *itoa(int value)
  • {
  • int count,i,sign;
  • char *ptr,*string,*temp;
  • count = 0;
  • if ((sign = value) < 0)
  • {
  • value = -value;
  • count++;
  • }
  • temp = (char *) malloc(INTSIZE + 2);
  • if (temp == NULL)
  • {
  • return(NULL);
  • }
  • memset(temp,'\0', INTSIZE + 2);
  • string = (char *) malloc(INTSIZE + 2);
  • if (string == NULL)
  • {
  • return(NULL);
  • }
  • memset(string,'\0', INTSIZE + 2);
  • ptr = string;
  • do {
  • *temp++ = value % 10 + '0';
  • count++;
  • } while (( value /= 10) >0);
  • if (sign < 0)
  • *temp++ = '-';
  • *temp-- = '\0';
  • for (i = 0; i < count; i++, temp--, ptr++)
  • {
  • memcpy(ptr,temp,sizeof(char));
  • }
  • return(string);
  • }
  • /*****************************************************************
  • ****** CopieJusque permet de copier 'ligne' lignes d'un fichier **
  • ************* (qui est pointé par le descripteur desc) **********
  • ****** dans un nouveau fichier(pointé par le descripteur desc2) **
  • *****************************************************************/
  • int CopieJusque (int desc,int desc2,int ligne) {
  • /*** Déclaration de variables... ***********************************
  • **** cpt nous permet de compter les lignes du fichier à copier ****
  • **** p[1] est notre tampon mémoire dans lequel on stocke ***********
  • **** le caractère lu dans le fichier que l'on copie ****************
  • *******************************************************************/
  • int cpt=0,caractere=0;
  • char p[1];
  • p[1]='\0';
  • while (cpt!=ligne) {
  • if (read(desc,p,1)==0) return caractere;
  • else {
  • if (p[0]=='\n') cpt++;
  • write(desc2,p,1);
  • caractere++;
  • }
  • }
  • return caractere;
  • }
  • /****************************************************************************************************
  • ******* CopieLigneTampon va nous permettre de garder en mémoire dans
  • 'buffer' les 'nb_ligne' ******
  • ******* premières lignes du fichier pointé par le descripteur 'desc'
  • *******************************
  • ****************************************************************************************************/
  • int CopieLigneTampon (int desc, int nb_ligne, char buffer[TAILLE_BUF]) {
  • int cpt=0,i=0,desc2,caractere=0;
  • char p[1];
  • p[1]='\0';
  • buffer[0]='\0';
  • while (cpt!=nb_ligne) {
  • if (read(desc,p,1)==0) return caractere;
  • else {
  • if (p[0]=='\n') cpt++;
  • buffer[i]=p[0];
  • i++;
  • caractere++;
  • }
  • }
  • return caractere;
  • }
  • /********************************************************************************
  • **** CreeNomFichier nous permet de générer un nom de fichier
  • *******************
  • **** avec le nom du fichier de depart et le nombre de fois ou on la decoupé
  • ****
  • ********************************************************************************/
  • char *CreeNomFichier (char *nom, int i) {
  • char *serie;
  • char *resultat;
  • int tmp,tmp2;
  • serie=(char *)malloc(2);
  • serie=itoa(i);
  • resultat=(char *)malloc(TAILLE_BUF);
  • resultat=strcat (resultat,nom);
  • if (i<10) {
  • serie[1]=serie[0];
  • serie[0]='0';
  • }
  • resultat=strcat (resultat,serie);
  • resultat=strcat (resultat,".TXT");
  • return (resultat);
  • }
  • /*******************************************************************************************************
  • ***** Va rechercher un mot 'mot' ds un fichier deja ouvert ('desc'
  • ->descripteur de ce fichier)... *****
  • ***** le descripteur pointe initialement a la position 'offset'
  • ****************************************
  • ***** renvoie '0' si ok et '-1' si ce mot n'y est pas
  • **************************************************
  • *******************************************************************************************************/
  • int ChercheMot (char *mot, int desc,int desc2,off_t offset_t){
  • int cpt=0;
  • char p[1];
  • off_t offset=offset_t;
  • p[1]='\0';
  • while (read(desc,p,1)!=0) {
  • if (mot[cpt]=='\0') return 0;
  • else {
  • if (p[0]==mot[cpt]) {
  • cpt++;
  • }
  • else {
  • cpt=0;
  • lseek(desc,offset,SEEK_SET);
  • read(desc,p,1);
  • write(desc2,p,1);
  • offset++;
  • lseek(desc,offset,SEEK_SET);
  • }
  • }
  • }
  • return (-1);
  • }
  • /*****************************************************************************************************
  • ****** Va inverser le mot de separation
  • **************************************************************
  • *****************************************************************************************************/
  • char *InverseMot (char *mot) {
  • int taille,i;
  • char *mot_inverse;
  • mot_inverse=(char *)malloc(sizeof(char *));
  • taille=strlen(mot);
  • i=0;
  • while( taille!=-1) {
  • taille--;
  • mot_inverse[i]=mot[taille];
  • i++;
  • }
  • mot_inverse[i]='\0';
  • return mot_inverse;
  • }
  • /*******************************************************************
  • ********** Cherche l 'offset de la firme recherchée *****************
  • *******************************************************************/
  • int Cherche_Offset_Firme (char *mot, int desc){
  • int cpt=0;
  • char p[1];
  • off_t offset=0,offset_tmp=0;
  • p[1]='\0';
  • while (read(desc,p,1)!=0) {
  • if (mot[cpt]=='\0') return offset;
  • else {
  • if (p[0]==mot[cpt]) {
  • cpt++;
  • offset_tmp++;
  • lseek(desc,offset_tmp,SEEK_SET);
  • }
  • else {
  • cpt=0;
  • lseek(desc,offset,SEEK_SET);
  • read(desc,p,1);
  • offset++;
  • offset_tmp=offset;
  • lseek(desc,offset,SEEK_SET);
  • }
  • }
  • }
  • return (offset);
  • }
  • /*******************************************************************************************************
  • ***** Va rechercher à l'envers un mot 'mot' ds un fichier deja ouvert
  • ('desc' ->descripteur de ce fichier)... *****
  • ***** le descripteur pointe initialement a la position 'offset'
  • ****************************************
  • ***** renvoie 'offset_t' si ok et '-1' si ce mot n'y est pas
  • **************************************************
  • *******************************************************************************************************/
  • int ChercheMotAvant (char *mot, int desc,off_t offset_t){
  • int cpt=0;
  • char p[1];
  • off_t offset=offset_t, offset_tmp=offset_t;
  • p[1]='\0';
  • while (read(desc,p,1)!=0) {
  • if (mot[cpt]=='\0') return (offset+2);
  • else {
  • if (p[0]==mot[cpt]) {
  • cpt++;
  • offset_tmp--;
  • lseek(desc,offset_tmp,SEEK_SET);
  • }
  • else {
  • cpt=0;
  • lseek(desc,offset,SEEK_SET);
  • read(desc,p,1);
  • offset--;
  • offset_tmp=offset;
  • lseek(desc,offset,SEEK_SET);
  • }
  • }
  • }
  • return (offset+2);
  • }
  • /***********************************************************************************
  • ***** Divise un fichier 'nom' en n fichiers avec des coupure de 'ligne'
  • lignes. ****
  • ***********************************************************************************/
  • void DiviseFichier (char *nom,int ligne) {
  • int desc,desc2,i=0,tmp;
  • char buffer [TAILLE_BUF];
  • char *p,*string;
  • string=(char *)malloc(200);
  • desc=open(nom,O_RDONLY);
  • CopieLigneTampon (desc,2,buffer);
  • while (read(desc,p,1)!=0) {
  • string=CreeNomFichier (nom, i) ;
  • i++;
  • desc2=open(string,O_CREAT|O_WRONLY,0644);
  • tmp=strlen(buffer);
  • write(desc2,buffer,tmp);
  • CopieJusque (desc,desc2,ligne);
  • }
  • close (desc);
  • }
  • /********************************************************************
  • ***** Divise par rapport a une ligne ,puis va chercher le mot...*****
  • ********************************************************************/
  • void Decoupage (char *nom,int ligne,char *mot) {
  • int desc,desc2,i=0,tmp,caractere=0;
  • char buffer [TAILLE_BUF];
  • char *p,*string;
  • string=(char *)malloc(200);
  • desc=open(nom,O_RDONLY);
  • caractere=CopieLigneTampon (desc,2,buffer);
  • while (read(desc,p,1)!=0) {
  • string=CreeNomFichier (nom, i);
  • i++;
  • desc2=open(string,O_CREAT|O_WRONLY,0644);
  • tmp=strlen(buffer);
  • write(desc2,buffer,tmp);
  • caractere=caractere + CopieJusque (desc,desc2,ligne);
  • ChercheMot (mot,desc,desc2,caractere);
  • }
  • close (desc);
  • }
  • /********************************************************************
  • ***** Fonction qui va chercher un mot puis revient en arriere *******
  • ***** pour trouver le mot séparateur et copie de ce séparateur ******
  • ***** au suivant... *************************************************
  • ********************************************************************/
  • int SortFirme (char *nom,char *mot,char *firme) {
  • int desc,desc2,i=0,tmp,offset;
  • char buffer [TAILLE_BUF];
  • char *p,*string,*inverse;
  • string=(char *)malloc(200);
  • inverse=(char *)malloc(sizeof(char *));
  • string=CreeNomFichier (nom, 0);
  • desc=open(nom,O_RDONLY);
  • CopieLigneTampon (desc,2,buffer);
  • desc2=open(string,O_CREAT|O_WRONLY,0644);
  • tmp=strlen(buffer);
  • write(desc2,buffer,tmp);
  • inverse=InverseMot (mot);
  • offset=ChercheMotAvant (inverse,desc,(Cherche_Offset_Firme (firme,desc)));
  • lseek(desc,offset,SEEK_SET);
  • ChercheMot (mot,desc,desc2,offset);
  • return 0;
  • }
  • /******************************************
  • ****** Lancement de la fonction ***********
  • ******************************************/
  • main (int argc,char *argv[]) {
  • // c'est ici que l'on modifie le nombre de ligne... 15000
  • int ligne=atoi(argv[2]);
  • /*if (argc==4)*/ Decoupage (argv[1],ligne,argv[3]);
  • /*
  • else {
  • if (argc==3)
  • SortFirme (argv[1],argv[2],argv[3]);
  • else printf("\n Usage : './decoupe' pour decouper un fichier FFPDDRED \n
  • et './decoupe numéro_firme' pour ressortir les DDR d'une seule firme\n \n");
  • } */
  • }
/*****************************
******************************
******* Oz ********************
*** Découpe de fichier ***********
*****************************
*****************************
*****************************/

#include <sys/types.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


//definition de la taille du tampon
#define TAILLE_BUF 1024
#define INTSIZE 10

/***
**** Ce programme decoupe un fichier en plusieurs petits fichiers de la manière que suit:
 On lui di de faire cette decoule toute les "ligne" ligne, il va jusque cette ligne, il cherche la fin des infos de la societe en cours et créé un nouveau fichier avec ces infos, et il continu jusque la fin du "gros" fichier.

****/


/**************************************************
***** Fonction qui change un int en string... *****
**************************************************/

char *itoa(int value)
{
  int count,i,sign;
  char *ptr,*string,*temp;

  count = 0;
  if ((sign = value) < 0)
    {
      value = -value;
      count++;
    }

  temp = (char *) malloc(INTSIZE + 2);
  if (temp == NULL)
    {
      return(NULL);
    }
  memset(temp,'\0', INTSIZE + 2);

  string = (char *) malloc(INTSIZE + 2);
  if (string == NULL)
    {
      return(NULL);
    }
  memset(string,'\0', INTSIZE + 2);
  ptr = string;


  do {
    *temp++ = value % 10 + '0';
    count++;
  }  while (( value /= 10) >0);

  if (sign < 0)
    *temp++ = '-';

  *temp-- = '\0';

  for (i = 0; i < count; i++, temp--, ptr++)
    {
      memcpy(ptr,temp,sizeof(char));
    }

  return(string);
}


/*****************************************************************
****** CopieJusque permet de copier 'ligne' lignes d'un fichier **
************* (qui est pointé par le descripteur desc)  **********
****** dans un nouveau fichier(pointé par le descripteur desc2) **
*****************************************************************/

int CopieJusque (int desc,int desc2,int ligne) {

	/*** Déclaration de variables... ***********************************
	**** cpt nous permet de compter les lignes du fichier à copier  ****
	**** p[1] est notre tampon mémoire dans lequel on stocke ***********
	**** le caractère lu dans le fichier que l'on copie ****************
	*******************************************************************/

	int cpt=0,caractere=0;
	char p[1];
	p[1]='\0';

	while (cpt!=ligne) {

		if (read(desc,p,1)==0) return caractere;
		else {
			if (p[0]=='\n')	cpt++;
			write(desc2,p,1);
			caractere++;
		}
	}
	return caractere;
}

/****************************************************************************************************
*******  CopieLigneTampon va nous permettre de garder en mémoire dans 
'buffer' les 'nb_ligne'  ******
******* premières lignes du fichier pointé par le descripteur 'desc'  
*******************************
****************************************************************************************************/

int CopieLigneTampon (int desc, int nb_ligne, char buffer[TAILLE_BUF]) {

	int cpt=0,i=0,desc2,caractere=0;
	char p[1];
	p[1]='\0';
	buffer[0]='\0';

	while (cpt!=nb_ligne) {
		if (read(desc,p,1)==0) return caractere;
		else {
			if (p[0]=='\n')	cpt++;
			buffer[i]=p[0];
			i++;
			caractere++;
		}
	}
	return caractere;
}

/********************************************************************************
****  CreeNomFichier nous permet de générer un nom de fichier 
*******************
****  avec le nom du fichier de depart et le nombre de fois ou on la decoupé 
****
********************************************************************************/

char *CreeNomFichier (char *nom, int i) {

	char *serie;
	char *resultat;
	int tmp,tmp2;
	serie=(char *)malloc(2);
	serie=itoa(i);

	resultat=(char *)malloc(TAILLE_BUF);
	resultat=strcat (resultat,nom);

	if (i<10) {
		serie[1]=serie[0];
		serie[0]='0';
	}

	resultat=strcat (resultat,serie);
	resultat=strcat (resultat,".TXT");
	return (resultat);
}

/*******************************************************************************************************
***** Va rechercher un mot 'mot' ds un fichier deja ouvert ('desc' 
->descripteur de ce fichier)... *****
***** le descripteur pointe initialement a la position 'offset' 
****************************************
***** renvoie '0' si ok et '-1' si ce mot n'y est pas 
**************************************************
*******************************************************************************************************/

int ChercheMot (char *mot, int desc,int desc2,off_t offset_t){

	int cpt=0;
	char p[1];
	off_t offset=offset_t;
	p[1]='\0';
	while (read(desc,p,1)!=0) {
		if (mot[cpt]=='\0') return 0;
		else {
			if (p[0]==mot[cpt]) {
				cpt++;
			}
			else {
				cpt=0;
				lseek(desc,offset,SEEK_SET);
				read(desc,p,1);
				write(desc2,p,1);
				offset++;
				lseek(desc,offset,SEEK_SET);
			}
		}
	}
	return (-1);
}


/*****************************************************************************************************
****** Va inverser le mot de separation 
**************************************************************
*****************************************************************************************************/

char *InverseMot (char *mot) {

	int taille,i;
	char *mot_inverse;
	mot_inverse=(char *)malloc(sizeof(char *));
	taille=strlen(mot);
	i=0;
	while( taille!=-1) {

		taille--;
		mot_inverse[i]=mot[taille];
		i++;
	}
	mot_inverse[i]='\0';
	return mot_inverse;


}
/*******************************************************************
********** Cherche l 'offset de la firme recherchée *****************
*******************************************************************/
int Cherche_Offset_Firme (char *mot, int desc){

	int cpt=0;
	char p[1];
	off_t offset=0,offset_tmp=0;
	p[1]='\0';
	while (read(desc,p,1)!=0) {
		if (mot[cpt]=='\0') return offset;
		else {
			if (p[0]==mot[cpt]) {
				cpt++;
				offset_tmp++;
				lseek(desc,offset_tmp,SEEK_SET);
			}
			else {
				cpt=0;
				lseek(desc,offset,SEEK_SET);
				read(desc,p,1);

				offset++;
				offset_tmp=offset;
				lseek(desc,offset,SEEK_SET);
			}
		}
	}
	return (offset);
}
/*******************************************************************************************************
***** Va rechercher à l'envers un mot 'mot' ds un fichier deja ouvert 
('desc' ->descripteur de ce fichier)... *****
***** le descripteur pointe initialement a la position 'offset' 
****************************************
***** renvoie 'offset_t' si ok et '-1' si ce mot n'y est pas 
**************************************************
*******************************************************************************************************/

int ChercheMotAvant (char *mot, int desc,off_t offset_t){

	int cpt=0;
	char p[1];
	off_t offset=offset_t, offset_tmp=offset_t;
	p[1]='\0';
	while (read(desc,p,1)!=0) {
		if (mot[cpt]=='\0') return (offset+2);
		else {

			if (p[0]==mot[cpt]) {
				cpt++;
				offset_tmp--;
				lseek(desc,offset_tmp,SEEK_SET);
			}
			else {
				cpt=0;
				lseek(desc,offset,SEEK_SET);
				read(desc,p,1);
				offset--;
				offset_tmp=offset;
				lseek(desc,offset,SEEK_SET);
			}
		}

	}
	 return (offset+2);
}


/***********************************************************************************
***** Divise un fichier 'nom' en n fichiers avec des coupure de 'ligne' 
lignes. ****
***********************************************************************************/

void DiviseFichier (char *nom,int ligne) {

	int  desc,desc2,i=0,tmp;
	char buffer [TAILLE_BUF];
	char *p,*string;
	string=(char *)malloc(200);

	desc=open(nom,O_RDONLY);
	CopieLigneTampon (desc,2,buffer);

	while (read(desc,p,1)!=0) {
		string=CreeNomFichier (nom, i)	;
		i++;
		desc2=open(string,O_CREAT|O_WRONLY,0644);
		tmp=strlen(buffer);
		write(desc2,buffer,tmp);
		CopieJusque (desc,desc2,ligne);
	}
	close (desc);

}

/********************************************************************
***** Divise par rapport a une ligne ,puis va chercher le mot...*****
********************************************************************/

void Decoupage (char *nom,int ligne,char *mot) {

	int  desc,desc2,i=0,tmp,caractere=0;
	char buffer [TAILLE_BUF];
	char *p,*string;
	string=(char *)malloc(200);

	desc=open(nom,O_RDONLY);
	caractere=CopieLigneTampon (desc,2,buffer);

	while (read(desc,p,1)!=0) {
		string=CreeNomFichier (nom, i);
		i++;
		desc2=open(string,O_CREAT|O_WRONLY,0644);
		tmp=strlen(buffer);
		write(desc2,buffer,tmp);
		caractere=caractere + CopieJusque (desc,desc2,ligne);
		ChercheMot (mot,desc,desc2,caractere);

	}
	close (desc);
}

/********************************************************************
***** Fonction qui va chercher un mot puis revient en arriere *******
***** pour trouver le mot séparateur et copie de ce séparateur ******
***** au suivant... *************************************************
********************************************************************/

int SortFirme (char *nom,char *mot,char *firme) {

	int  desc,desc2,i=0,tmp,offset;
	char buffer [TAILLE_BUF];
	char *p,*string,*inverse;
	string=(char *)malloc(200);
	inverse=(char *)malloc(sizeof(char *));
	string=CreeNomFichier (nom, 0);
	desc=open(nom,O_RDONLY);
	CopieLigneTampon (desc,2,buffer);
	desc2=open(string,O_CREAT|O_WRONLY,0644);
	tmp=strlen(buffer);
	write(desc2,buffer,tmp);
	inverse=InverseMot (mot);
	offset=ChercheMotAvant (inverse,desc,(Cherche_Offset_Firme (firme,desc)));
	lseek(desc,offset,SEEK_SET);
	ChercheMot (mot,desc,desc2,offset);
	return 0;

}

/******************************************
****** Lancement de la fonction ***********
******************************************/

main (int argc,char *argv[]) {
	// c'est ici que l'on modifie le nombre de ligne... 15000
     int ligne=atoi(argv[2]);
	/*if (argc==4)*/ Decoupage (argv[1],ligne,argv[3]);
    /*
	else {
		if (argc==3)
			SortFirme (argv[1],argv[2],argv[3]);
		else printf("\n Usage : './decoupe' pour decouper un fichier FFPDDRED \n 
et './decoupe numéro_firme' pour ressortir les DDR d'une seule firme\n \n");
	}      */
}



 Sources du même auteur

ANIMATION GTK QUI REPRÉSENTE L'ÉVOLUTION DES "CASES" D'UNE M...

 Sources de la même categorie

Source avec Zip RECHERCHE D'ANNAGRAMMES par Torin
GESTION DE CHAINE DE CARACTÉRE EN C++ AVEC NSTRING par xmustapha
Source avec Zip COMMENTER CODE C <=> ASM (WIN64) par BruNews
Source avec Zip GSTRING - GESTION DES CHAINES DE CARACTÈRES par Neokript
Source avec Zip ANALYSEUR SYNTAXIQUEV(0.1) par kohan95

Commentaires et avis

Commentaire de REMI77 le 05/06/2004 10:26:03

Bonjour
J'ai un petit soucis avec le fichier #include &lt;unistd.h&gt;
Pourrais tu me dire ou je porrais le trouver, je suis sous V studio6
Merci
A bientot
Rémi

Commentaire de ash08 le 05/06/2004 21:31:31

c'est juste une petite question de débutant mais dans ta fonction

[code]

main (int argc,char *argv[]) {
    // c'est ici que l'on modifie le nombre de ligne... 15000
     int ligne=atoi(argv[2]);
    /*if (argc==4)*/ Decoupage (argv[1],ligne,argv[3]);
    /*
    else {
        if (argc==3)
            SortFirme (argv[1],argv[2],argv[3]);
        else printf("\n Usage : './decoupe' pour decouper un fichier FFPDDRED \n
et './decoupe numéro_firme' pour ressortir les DDR d'une seule firme\n \n");
    }       */
}

[/code]

Il ne manquerais pas un

return 0;

Commentaire de oz1kan le 06/06/2004 18:36:19

En fait le "return 0" on en a besoin, si tu mets un "int" avant ton main...
ici, il n'y a pas de int devant, donc tu n'as pas besoin de retourner un entier...

Commentaire de djl le 07/06/2004 00:48:56

REMI77 &gt; pas de unistd.h avec vc++, c'est POSIX et détourné sous windows

Commentaire de bonac le 07/06/2004 12:30:24

Juste une idée qui me vient: Un code similaire au tien pourrais découper un fichier en plusieurs fichiers de taille définie par l'utilisateur. Et ensuite regrouper les fichiers en un seul fichier. L'intéret serait de segmenter un gros fichier pour pouvoir le transférer sur plusieurs disquettes par exemple, le transporter et le concaténer sur une autre machine. Bien sûr avec les DVD, CD et clef USB il n'y a plus trop d'intéret... mais sur de vieilles bécanes cela peut être très utile.

Commentaire de oz1kan le 07/06/2004 18:36:13

C'est clair que ça aiderait pas mal de personnes qui ont simplement un lecteur de disquette avec des disquettes de 1.44 meg et des fichiers de plusieurs még à transférer.
Si j'en ai le temps, j'essaiera de mettre en place ce que tu propose, ca aidera peut être quelques personnes, qui sait...
Merci pour ton idée.

Commentaire de djl le 07/06/2004 20:59:22

bonne idée, mais ca existe

Winzip le fait tres bien

Commentaire de ash08 le 08/06/2004 13:04:32

si tu ne met pas "int" devant tu ne met pas le "return 0"

mais quand tu declare

main (int argc,char *argv[]) {

c'est une declaration implicite de type int qui n'est plus autorisée en C99 et donc le return 0 est obligatoire :-)

ce qui devrait donner ca

int main (int argc,char *argv[])
{
     // c'est ici que l'on modifie le nombre de ligne... 15000
     int ligne=atoi(argv[2]);
    /*if (argc==4)*/ Decoupage (argv[1],ligne,argv[3]);
    /*
    else {
        if (argc==3)
            SortFirme (argv[1],argv[2],argv[3]);
        else printf("\n Usage : './decoupe' pour decouper un fichier FFPDDRED \n
et './decoupe numéro_firme' pour ressortir les DDR d'une seule firme\n \n");
    }       */
   return 0;
}

Commentaire de djl le 08/06/2004 20:45:29

non, en c99 comme en c++, le return 0 n'est pas obligatoire

c'est pas ce que tu voulais dire?

Commentaire de ash08 le 09/06/2004 13:51:56

Ce que je ne comprend pas alors c'est que l'on ma dis qu'il etait obligatoire, que le type de declaration implicite n'est plus autorise en C99 et donc quand on declare main en type int on doit mettre return 0 a la fin

exemple on ne doit plus ecrire

main()
{
}

mais

int main~()
{
return 0;
}

En fait on le met seulement si on a envie (je croit que ca aide pour le debuggage) mais je croit aussi que la fonction main renvoie toujours quelque chose ce qui impose se return 0
voila pourquoi j'ai un peu de mal a comprendre d'un cote on me dit qu'il est obligatoire avec de bons arguments et de l'autres cotés il n'est pas obligatoire avec aussi de bons arguments la je vous avouerais que je ne sais plus
Si quelqu'un pouvait m'eclairer j'eviterais de me cogner contre les murs merci

Commentaire de djl le 09/06/2004 20:27:27

test le code retour de ton programme et tu vera qu'avec ou sans return 0 c'est bien 0
encore faut il que le compilo suive le standard, mais je crois que c99 est supporté par la plupart des compilo maintenant

maintenant tout la question est de savoir si du code en c99 ou si tu prefer le standard le plus rependu, l'ansi c89

Commentaire de ash08 le 18/06/2004 23:44:21

Ok et bien je te remercie de ta reponse c'est beaucoup plus clair maintenant

bonne soirée a tous

Commentaire de Jackboy le 18/04/2005 16:23:06

cette application me permetterai t'il de decouper une images en plusieurs petites, du genre tuiler une grosse images !

Commentaire de oz1kan le 10/11/2006 13:22:55

en fait, pas trop car ce programme recherche une chaine de caracteres qui se repetent dans le texte... par contre si tu modifie le source, il y aurait moyen de faire ce que tu desire...

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales