Extraire une ligne précise d'une chaine de caractère

Soyez le premier à donner votre avis sur cette source.

Snippet vu 27 633 fois - Téléchargée 9 fois

Contenu du snippet

/*
    buffer = pointeur sur la chaine source.
    dest = pointeur sur la chaine destinatrice qui recevra la ligne.
    buffer_size = taille en octet de la chaine source (buffer).
    line = la ligne voulu. 0 EST CONSIDÉRÉ COMME LA PREMIÈRE LIGNE.
    La fonction ne recherche pas les 0 finals. Elle ne se fit que sur buffer_size
    pour être sûr de ne pas déborder sur les zones mémoire avoisinantes donc 
    soyez sûr d'entrer la bonne taille.
*/
void GetLine (char *buffer, char *dest, int buffer_size, int line)
{
    char *c = dest; // Pointeur sur la chaine destinatrice
    // Si la valeur de line est plus petite que 0 ou si buffer ne pointe sur rien
    // ou encore si buffer_size est plus petit ou égal à 0...
    if(line < 0 || buffer == 0 || buffer_size <= 0)
       return; // On quitte
    // On va se positionner sur la ligne voulu
    while(line > 0) // 0 EST CONSIDÉRÉ COMME LA PREMIERE LIGNE
    {
       while(*buffer != '\n') // On cherche les retours à la ligne
       {
           // Si on atteind la fin de la chaine
           if(buffer_size <= 0)
               return; // On quitte car la ligne n'est pas présente
          buffer++; buffer_size--;
       }
       // On incrémente le pointeur pour sauter le retour à la ligne trouvé
       buffer++; 
       line--; buffer_size--;
    }
    // On extrait la ligne de buffer vers dest
    while(*buffer != '\n') // Roule jusqu'au prochain retour à la ligne
    {
        // Si entre temps, on atteind la fin de la chaine, on arrete l'extraction ici
        if(buffer_size <= 0)
            break;
        *c = *buffer;
        c++; buffer++; buffer_size--;
    }
    /*
        Vue qu'il s'agit ici d'une chaine de caractère, on ajoute un 0 final.
        SOYEZ SUR QU'IL Y AI ASSEZ DE MEMOIRE POUR LA CHAINE DESTINATRICE!!!
        Évidament, si on ne veut pas de 0 final, il faudra créé une variable qui
        sera incrémenté à chaque ajoue de caractère dans dest et retourné à la fin
        de la fonction. Savoir le nombre de valeur écrite dans un tampon est 
        essentiel pour éviter les débordements tampon potentiel !
    */
    *c = 0;
}

Compatibilité : C

Disponible dans d'autres langages :

A voir également

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.