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 :

diviser une chaine de caractere


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut diviser une chaine de caractere
    Bonjour,

    J'ai un fichier contenant deux champs: objet (chaine de caractère) et valeur(chaine de caractère)
    ces deux champs sont séparés par deux points :

    par exemple soit le fichier 'test.txt':

    1 3 4 10 : d b c
    5 2 16 8 : a d c


    Je voulais transformer ce fichier par exemple dans un autre fichier de sorte d'obtenir:

    1 : d b c
    3 : d b c
    4 : d b c
    10 : d b c
    5 : a d c
    2 : a d c
    16 : a d c
    8 : a d c

    Je n'arrive à transformer la chaine '1 3 4 10' transformés en quatre entiers 1, 3, 4 et 10
    et pour chaque entier on ajoute la même chaine valeur 'd b c'

    de même pour la chaine '5 2 16 8' transformés en quatre entiers
    5, 2, 16,8
    et pour chaque entier on ajoute la même chaine valeur 'a d c'

    S'il vous plait aidez moi.

    Merci.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Un peit exemple de ce que tu as fais ?

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 74
    Par défaut
    essaye de lire ton fichier ligne par ligne (getline() si tu es sur linux)

    pour chaque ligne localise la position des deux point ":" strstr()

    une fois la postion des ":" est connue il suffit de scinder la chaine en deux (strncpy() memcpy() )

    et pour decomposer la chaine (sous chaine) qui contient des entier tu peux utiliser strtok ()

    et en fin sprintf te prmet de construire la nouvelle chaine sous format souhaité.

    n'hésite pas à faire man sur les differentes fonction ( sur la console ou sur google)

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonsoir,

    Mon programme C est sous windows.

    Je n'arrive pas à coder les étapes décrites au dessus.

    Pouvez vous m'aider ?

    Merci.

  5. #5
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Je pense qu'il existe plusieurs solutions à ton problème mais celle qui me viens en tête en premier :

    • Tu dois commencer par stocker la valeur en recherchant d'abord la position tu caractère ':' ce que tu peux faire avec la fonction strchr puis tu stockes la chaîne restante à partir du pointeur retourné par cette fonction.
    • Tu fais pointer un pointeur sur ta chaîne (tu peux éventuellement faire une copie de la chaîne car elle sera modifiée avec ma solution. Ce pointeur va te permettre de voyager comme bon te semble dans la chaîne.
    • A partir de ton nouveau pointeur bin il te reste qu'à lire le caractère sur lequel il se trouve et l'écrire dans le nouveau fichier en prenant soin bien sûr de vérifier si le caractère n'est pas un espace, ce que tu peux faire avec la fonction isspace.


    Cette solution est surement un peu moins compliquée que celle de sofiane80. Tu dois cependant quand même lire le fichier ligne par ligne ce que tu peux faire avec la fonction fgets. Toutes ces fonctions sont plus faciles à utiliser que les autres qui t'ont étés proposées plus haut et restent également standard.


    J'espère t'avoir mis sur la voie, à toi de coder et de nous montrer ce que tu as fait
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2009
    Messages
    392
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 392
    Par défaut
    Bonjour,

    Pouvez vous me donner d'exécution manuelle de votre idée car je n'ai pas compris comme il faut ?

    Je vous explique mon problème:

    En réalité, j'ai un fichier contenant deux champs: objet (chaine de caractère) et valeur(chaine de caractère)
    ces deux champs sont séparés par deux points :

    par exemple soit le fichier 'input.txt':

    1 3 4 10 : d b c
    5 2 16 8 : a d c

    Je voulais transformer ce fichier par exemple dans un autre fichier 'output.txt' de sorte d'obtenir:

    1 : d b c
    3 : d b c
    4 : d b c
    10 : d b c
    5 : a d c
    2 : a d c
    16 : a d c
    8 : a d c
    Je n'arrive à transformer la chaine '1 3 4 10' transformés en quatre entiers 1, 3, 4 et 10
    et pour chaque entier on ajoute la même chaine valeur 'd b c'

    de même pour la chaine '5 2 16 8' transformés en quatre entiers
    5, 2, 16,8
    et pour chaque entier on ajoute la même chaine valeur 'a d c'

    Je pensais à faire cette transformation car je voulais lire à partir de la chaine '1 3 4 10' l'entier 1 pour faire un autre traitement qui utilise ce entier et ne pas toute la chaine .
    de même on lit l'entier 3 puis l'entier 4 puis l'entier 10.

    après on fait la même chose pour la chaine '5 2 16 8' c'est à dire nous avons besoin de l'entier 5 puis 2 puis 16 puis 8.


    Que proposez vous ?

    Merci.

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. Réponses: 5
    Dernier message: 21/07/2004, 19h34
  3. Extraire un nom d'une chaine de caractere
    Par iamspacy dans le forum Linux
    Réponses: 4
    Dernier message: 03/05/2004, 21h34
  4. Réponses: 2
    Dernier message: 30/03/2004, 11h31
  5. Controler une chaine de caracteres ou d'entiers?
    Par Le druide dans le forum C
    Réponses: 6
    Dernier message: 25/09/2003, 08h48

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