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 : 24505
Catégorie(s) : Chaîne de caractères
Langages dispo pour ce code :
- C
- C# 1.x, C# 2.x
- Windev
- C
- Javascript



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;
}
Langage : C# 1.x , C# 2.x
Date ajout : 20/09/2006
Posté par yann_lo_san [Liste]
DateMAJ : 20/09/2006

// string sChaineSource est le bloc de texte

string RC = Environment.NewLine; 
string[] tabLigne = sChaineSource.Split(RC); 

// et basta !


Remarque :
Pour récupérer la ligne, il suffit de fournir l'index :
ex : tabLigne[3] <= retournera la 4eme ligne
Langage : Windev
Date ajout : 25/09/2006
Posté par fabienlaps [Liste]
s,Machaine sont des chaînes
tbTTab est une tableau dynamique de 1 chaînes
i est un entier = 1
POUR TOUTE CHAINE s DE Machaine SEPAREE PAR RC
    tbTTab[i] = s
    i++
FIN
Langage : C
Date ajout : 02/10/2006
Posté par DeAtHCrAsH [Liste]
int GetLine(const char * pszSource, char * pszDestination, int iLine)
{
    int i;
    i = 0;
    while(*pszSource && i < iLine) {
        if(*pszSource++ == '\n') i++;
    }
    if(*pszSource && i == iLine) {
        i = 0;
        while(*pszSource && *pszSource != '\n') {
            pszDestination[i++] = *pszSource++; 
        }
        pszDestination[i] = 0;
    } else {
        i = 0;
    }
    return i;
}
Remarque :
La fonction est très simple d'utilisation et bien plus optimisé que sa version proposé par SAKingdom.
Pas de superflu inutile.
La fonction prend en parametre la chaine source, la chaine destination et le numéro de ligne a extraire.
La fonction retourne la taille de la ligne resultante.

Voici un exemple d'utilisation :

int main()
{
char * pszSrc = new char[40];
char * pszDest = new char[40];

strcpy(pszSrc, "Bonjour\nCa va?\nMoi oui.\nEt toi ?\n");

printf("Taille\t: %i\nLigne\t: %s\n\n", GetLine(pszSrc,pszDest, 3), pszDest);

return 0;
}
Langage : Javascript
Date ajout : 05/04/2007
Posté par stfou [Liste]
var ligne_extraite=chaine_contenant_plusieurs_lignes.split("\n")[0];
//remplacer 0 par le numéro de la ligne, zéro étant considéré comme la première ligne.


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



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

{C# / C#.NET} FFMPEG.NET : WRAPPER .NET DE FFMPEG
Cette source est un wrapper .Net pour FFMPEG. Pour le moment, vous ne pouvez extraire ou convertir q...

{JAVA / J2EE} JTABLE REDIMENSIONNABLE
Cette source est une table à laquelle on peut ajouter ou supprimer des lignes. Pour cela, elle utili...

{JAVA / J2EE} EXTRACTION DES IMAGES CONTENUES DANS UN PDF
Pour des besoins personnels, j'ai eu besoin d'extraire les images contenues dans un PDF. Tout le tr...

{Visual Basic, VB6, VB.NET, VB 2005} ACTION_MENU_CONTEXTUEL_FICHIER
Associer un programme (pas l'exe) au menu contextuel (clic droit) d'un fichier. J'ai mis 2 exemples...

{Visual Basic, VB6, VB.NET, VB 2005} INFOTRACE BASE DE DONNÉES HTML
Voici le concept: -utiliser le programme comme lecteur de flux actualisé toutes les secondes sur un...

{Visual Basic, VB6, VB.NET, VB 2005} EXTRAIRE_IMAGES ET SON_POWERPOINT
Extraire les images et le son d'une présentation PowerPoint. Extraire les diapos d'une présentatio...

{Visual Basic, VB6, VB.NET, VB 2005} SELECTIONS DANS UNE FEUILLE EXCEL PUIS CRÉATION DE NOUVELLES FEUILLES EXCEL AVEC LES DONNÉES SÉLECTIONNÉES
Bonjour je souhaite faire un tri d'une feuille Excel sur 2 critères ("nom", "id operation"), puis ...

{Visual Basic, VB6, VB.NET, VB 2005} SCRIPT VBS D'ENVOI DE MAIL EN LIGNE DE COMMANDE
Script VBS d'envoi de mail en ligne de commande Syntaxe : sendmail -e -d -o -m [-s] [-p<...

{C# / C#.NET} RICHTEXTBOX NUMÉROTÉ (NUMÉROS DE LIGNES)
Ce code est un exemple de ce que j'utilise pour un éditeur de fichiers que j'ai développé. Lorsque l...

{Visual Basic, VB6, VB.NET, VB 2005} EXTRACTION DES FICHIERS IMG DE GTA 3 (VICE CITY ET SAN ANDREAS)
Ce programme sert à ouvrir les fichiers IMG de GTA 3, Vice City et San Andreas pour en extraire le c...