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 : 17998
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} 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...

{Visual Basic, VB6, VB.NET, VB 2005} IMPRESSION AU FIL DE L'EAU VERS IMPRIMANTE MATRICIELLE
J'avais besoin d'imprimer sur une imprimante matricielle de l'ancienne generation malheureusement qu...

{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...