IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Découper une chaine de caractère selon un délimiteur. [Non suivi]


Sujet :

C

  1. #1
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut Découper une chaine de caractère selon un délimiteur.
    Existe t-il une fonctionn pour réaliser ca ?
    Dans ce style la :
    http://c.developpez.com/sources/c/?p...TRING_decouper


    Je cherche à récupérer les différents "paramètres" d'une date et de les placer dans un tableau.
    Par exemple : 2007/07/21 09H29:11
    Pouvoir récupérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    date[1] : 2007
    date[2] : 07
    date[3] : 21
    date[4 ... etc

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 266
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par Space Cowboy
    Existe t-il une fonctionn pour réaliser ca ?
    Dans ce style la :
    http://c.developpez.com/sources/c/?p...TRING_decouper


    Je cherche à récupérer les différents "paramètres" d'une date et de les placer dans un tableau.
    Par exemple : 2007/07/21 09H29:11
    Pouvoir récupérer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    date[1] : 2007
    date[2] : 07
    date[3] : 21
    date[4 ... etc
    Le problème ici est que le délimiteur n'est pas le même dans toute la chaîne : d'abord il s'agit du caractère "/" puis de "H" puis de ":"
    Je n'ai pas testé mais une solution envisageable est d'utiliser la fonction de la FAQ avec le délimiteur "/" tu obtiens ainsi 3 chaines (car tu connais le format de la chaîne initiale à parser) : la premiere est "2007", la seconde "07" et la troisième tu l'utilises pour la découper avec le délimiteur " " et tu obtiens alors le "21" puis le restes tu l'utilises pour encore la dacouper mais avec "H" et ainsi de suite.
    Ceci serait possible si toutes tes chaînes en entrée sont du même (celui de ton exemple)

  3. #3
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut
    Il n'existe pas de fonction de base qui fait ca toute seule ?

    C'est une usine à gaz la fonction dans la FAQ ...

  4. #4
    Membre du Club Avatar de Electroniktor
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 150
    Points : 55
    Points
    55
    Par défaut
    Je pense que tu as une partie de ta réponse dans la : ici
    Ensuite tu rentres ce que tu obtiens dans un tableau !

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Space Cowboy
    Il n'existe pas de fonction de base qui fait ca toute seule ?
    strtok(). Il y a quelques restrictions d'usage. strtok_r() a moins de contraintes (POSIX.1, donc très portable).

    sscanf() aussi, probablement, si le format est fixe...
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 100
    Points : 116
    Points
    116
    Par défaut
    bonjour,

    je débute en c,
    mais j'ai déjà fais ce genre d'extraction avec la fonction strtok.
    Je me suis donc permis de résoudre ton pb (enfin, je pense ) ...
    qu'il te reste plus qu'à adapter a ton besoin (faut bien bosser un petit peu)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      char s[] = "01/06/2007 10:30:00";
      char step[] = "/: ";
      char *token = strtok(s, step);
     
      while (token != NULL)
        {
          printf("\n%s", token);
          token = strtok(NULL, step);
        }
    Si, je fais cela, ce que lors de l'utilisation de strtok je suis tombé sur un
    petit bug que je n'arrive pas à m'expliquer.
    Et je voudrais profiter du fait qu'il y est de nombreuses personnes compétentes sur ce forum c pour me l'expliquer.
    En effet, strtok plante si on lui passe des paramètres en char* alors qu'elle fonctionne très bien avec des char[].
    Il me semblait pourtant qu'un char* et un char[] étaient équivalent.

    Merci

  7. #7
    Membre régulier Avatar de Beldom
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 63
    Points : 70
    Points
    70
    Par défaut
    Il me semble qu'il y a une différence au niveau de l'allocation en mémoire.
    Un char * ne peut pas être modifié s'il n'a pas été malloc, contrairement à un char [].

    Vala vala ^^
    La balise [code] et le tag résolu, c'est bien !
    Rôliste pas toujours éclairé et fan de Star Wars

  8. #8
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Sifo-Dyas
    En effet, strtok plante si on lui passe des paramètres en char* alors qu'elle fonctionne très bien avec des char[].i
    strtok modifie la chaine qui lui est passee. Il faut donc que cette chaine soit modifiable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char *s = "01/06/2007 10:30:00";
    est un pointeur vers une chaine de caractere non modifiable. Il est preferable de l'indiquer en utilisant const.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char s[] =  "01/06/2007 10:30:00";
    est une chaine de caractere.

  9. #9
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    Et tu as regardé du côté d'une fonction qui s'appelle strptime ?

Discussions similaires

  1. Bash - Découper une chaine de caractères
    Par nicolas.pissard dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 16/12/2014, 13h18
  2. Découper une chaine de caractères
    Par momomafioso dans le forum ASP.NET
    Réponses: 1
    Dernier message: 28/06/2007, 11h11
  3. [SQ2K] Découper une chaine de caractères
    Par maitrebn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/04/2007, 19h22
  4. Réponses: 6
    Dernier message: 15/04/2007, 13h06
  5. [VBA] Découper une chaine de caractères
    Par rantanplan81 dans le forum VBA Access
    Réponses: 3
    Dernier message: 12/04/2007, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo