1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ExtraireLigne : Extraire la ligne d'un fichier
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Entrée :
// + CheminFichier : char * -> Le chemin du fichier dont on veut extraire la ligne
// + Ligne : int -> L'adresse de ligne à extraire
// + LigneExraite : char * -> La chaine de caractère qui contiendra la ligne à extraire
// + LongueurFiltre : int * -> La longueur de la chaine contenant la ligne à extraire
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void ExtraireLigne( char *CheminFichier, int Ligne, char **LigneExtraite, int *LongueurLigneExtraite )
{
FILE *Fichier = fopen(CheminFichier,"r");
int ligne_courante = 0;
int position_caractere = 0;
int position_debut_ligne = 0;
int position_fin_ligne = 0;
*LongueurLigneExtraite = 0;
*LigneExtraite = NULL;
char *Test_Realloc = NULL;
// On parcourt le fichier pour connaitre les positions des caractères du début et de la fin de la ligne à extraire
char C;
while( fscanf(Fichier,"%c",&C) != EOF )
{
position_caractere++;
// On test si le caractère courant est le caractère de changement de ligne
if ( C == '\n' )
{
// On incrémente la valeur de la ligne courante dès qu'on change de ligne
ligne_courante++;
// On sauvegarde alors la position du caractère de la fin de ligne courante
position_fin_ligne=position_caractere;
// On test si la ligne courante est la ligne à extraire
if ( ligne_courante == Ligne )
{
// On connait les positions du début et de la fin de la ligne, on parcourt à nouveau le fichier
FILE *Fichier=fopen(CheminFichier,"r");
int p=0;
while( fscanf(Fichier,"%c",&C) != EOF )
{
p++;
// Si on parcourt les caractères de ligne à extraire, on copie ces caractères
if ( position_debut_ligne <= p && p <= position_fin_ligne )
{
if( LigneExtraite != NULL && LongueurLigneExtraite != NULL)
{
Test_Realloc=realloc(Test_Realloc, (*LongueurLigneExtraite+1)*sizeof(char));
if ( Test_Realloc != NULL )
{
*LigneExtraite = Test_Realloc;
(*LigneExtraite)[*LongueurLigneExtraite] = C;
*LongueurLigneExtraite = *LongueurLigneExtraite+1;
}
else {
*LigneExtraite = NULL;
*LongueurLigneExtraite = 0;
printf("\n\nERREUR DANS LA FONCTION ExtraireLigne \n + ERREUR DANS L'ALLOCATION\n\n");
}
}
else printf("\n\nERREUR DANS LA FONCTION ExtraireLigne \n + VERIFIEZ LE REFECEMENT DE VOS POINTEURS\n\n");
}
}
// On passe à la ligne suivante
position_debut_ligne=position_fin_ligne+1;
fclose(Fichier);
}
if ( ligne_courante != Ligne )
{
// On passe à la ligne suivante
position_debut_ligne=position_fin_ligne+1;
}
}
}
fclose(Fichier);
} |
Partager