Les Snippets

Connexion

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

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 18/09/2006 18:48:55 et initié par SAKingdom [Liste]
Date de mise à jour : 03/06/2007 14:31:12
Vue : 15515
Catégorie(s) : Chaîne de caractères
Langages dispo pour ce code :
- C
- C# 1.x, C# 2.x
- Windev
- C
- Javascript
- Voir tous les langages pour ce code snippet



Langage : C
Date ajout : 18/09/2006
Posté par SAKingdom [Liste]
/*
    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;
}

Snippets en rapport avec : Ligne, Extraction, Chaine de caractère



Codes sources en rapport avec : Ligne, Extraction, Chaine de caractère

{PHP} PHP EXTRAIRE DES MAILS D'UN GROS FICHIER LOCAL OU DISTANT
On peut extraire tout les mails d'un fichier sans se prendre la tête pendant dans jours... Qu'en pe...

{Visual Basic, VB6, VB.NET, VB 2005} EXTRACTION DES ICONES D'UN FICHIER .EXE
La code utilise l'api windows pour extraire les icones d'une executable (metadata). On doit ajout...

{PHP} EQUIVALENT DE INNERHTML JAVASCRIPT, MAIS GLOBAL
Cette fonction renvoie un tableau du contenu de toutes les occurrences d'une balise, HTML ou non, de...

{Visual Basic, VB6, VB.NET, VB 2005} EXTRAIRE TOUS LES ICONES D'UN ÉXÉCUTABLE OU D'UNE DLL
un simple projet contenant deux classes pour l'extraction d'icones code original en C# http:/...

{PHP} RESERVATION EN LIGNE DE GITE
le script vous permet : * d'administrer plusieurs locations * d'indiquer à vos visiteurs l'état ...

{Javascript / DHTML} DESSINER DES CERCLES/DISQUES/LIGNES EN JAVASCRIPT
Cette source permet de dessiner des cercles, des disques et des lignes en javascript sans utiliser d...

{PHP} EXTRACTEUR DE VARIABLES DE FORMULAIRES
Ça arrive parfois d'avoir un formulaire avec beaucoup de variables et reprendre chaque variable à tr...

{Visual Basic, VB6, VB.NET, VB 2005} EXTRACTION CODE HTML, EDITION DYNAMIQUE DE FICHIER HTML (MARCHE EN VB6)
A plusieurs reprises, j'ai trouvé des questions sur le forum portant sur la possibilité d'extraire l...

{Visual Basic, VB6, VB.NET, VB 2005} LIMITER LE NOMBRE DE LIGNES DANS UN TEXTBOX
J'utilise une API pour compter le nombre de lignes. Il y a plusieurs problématiques : Si une lett...

{Visual Basic, VB6, VB.NET, VB 2005} PASSAGE DE MISE EN FORME PYRAMIDALE À LINÉAIRE DANS EXCEL
pour Gwad063 : passes d'une hiérarchie de lignes à un tableau avec des lignes droite (inexplicable...