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 : 12972
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

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

{Visual Basic, VB6, VB.NET, VB 2005} MANIPULATION FICHIER EXECUTABLE
Comment ajouter des données de plus dans un fichier exécutable ? c'est comme winzip, il le fait ave...

{PHP} EXTRACTION DE ZIP (QUI MARCHE SUR FTP ET EASYPHP SANS PROBLÈMES)
Voila une source qui marche pour l'extraction de ZIP !! Pour EasyPHP pensez a activer l'extension...

{C / C++ / C++.NET} IMAGE : LIGNE DE PARTAGE DES EAUX : LPE (WIN32)
La LPE est un algorithme en traitement de l'image qui permet de segmenter l'image en région homogène...

{C / C++ / C++.NET} [C / WIN32] LIRE UN FICHIER LIGNE PAR LIGNE
Fonctions permettant de lire un fichier ligne par ligne facilement et rapidement... Supporte les fi...

{Visual Basic, VB6, VB.NET, VB 2005} SUPPRIMER LIGNES VIDES FICHIER TEXTE
Ce script supprime les lignes vides dans un fichier texte, vous pouvez parcourir les répertoires de ...

{C# / C#.NET} LECTURE LIGNE PAR LIGNE DE LA SORTIE STANDARD D'UN PROGRAMME CONSOLE
En réponse à la question de sosekeyser (http://www.csharpfr.com/infomsg_PROCESS-AVEC-OUTPUT-DANS-TEX...