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 :

modification d'une chaine de caractères en C


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Par défaut modification d'une chaine de caractères en C
    bonjour,

    je suis débutante en C et je veux implémenter une fonction qui modifie une chaine de caractères
    par exemple:
    123,aaa, ,rbjh,874555, \0
    je veux la transformer en 123,'aaa',NULL ,'rbjh',874555,NULL \0
    càd si le champs est numérique je le laisse tel qu'il est , si c'est une chaine je la met entre ' ' et si le champs est vide je le remplace par NULL
    j'ai eu l'idée d'utiliser les fonction prédéfinies de ctype.h(isblank(), isalph()....) mais on m'affiche l'erreur "invalid conversion\comparison between int and char"
    bon la chaine est définie ainsi:
    char * line_data
    svp aidez moi!!
    merci

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Deux liens qui pourraient t'intéresser :
    - [Tutoriel] Conversion des chaînes
    - [FAQ] Quel est le rôle de # dans la définition d'une macro ?
    Est-ce que cela répond à tes besoins ?

  3. #3
    Candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Juin 2011
    Messages : 3
    Par défaut
    non pas vraiment,
    ce que je voulais c mettre les chaines entre ' et '

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     static char* to_varchar (char * field)
    {
    	printf("dans la fonction to_varchar \n");
    	char* D = (char*)malloc(sizeof(char*) * MAX_FIELD_NAME_LEN);
    	char* F = (char*)malloc(sizeof(char*) * MAX_FIELD_NAME_LEN);
    	D=F = "'";
    	strcat(D, field);
    	strcat(D,"\0");
            strcat(D,F);
            strcat(D,"\0");
    	printf("%s \n",D);
    	return(D;
     
    }
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    static char* validate_data (char * line_data)
    {
    	long int len;
    	char* field= (char*)malloc(sizeof(char*) * MAX_FIELD_NAME_LEN) ;
     
      do
    {
        len = strcspn(line_data, ","); 
        strncpy (field, line_data, len); 
        field[len]='\0';
    	int i=0;
    	int r;
    		do
    		{  
    		   r = isdigit(field[i]);
    		   i++;
    		}
    		while ((r == 0) || (i >strlen(field)) );
    		if(r = 0)
    		{
    		  field = to_varchar(field);
    		}
     
        line_data = line_data + len + 1; /* To make line_data points to the next field: line_data will point to the caracter just following the "," */
        printf("the rest from the line is :%s \n",line_data);
    } 
    while (line_data[0] != '\0');
     
    }

    bon c ce que j'ai fais
    mais lorsque j'ai testé to_varchar() seule il se plante!!!

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Il y a pas mal de truc incorrects, entre autre :

    - D=F = "'"; n'est pas correct. Ce que tu veux initialiser ce n'est pas D et F, mais *D et *F (ou D[0] et F[0], ce qui est peut-être plus clair).

    - Tu ne devrait allouer que MAX_FIELD_NAME_LEN octets, pas sizeof(char*) * MAX_FIELD_NAME_LEN (dit autrement, c'est sizeof(char), pas sizeof(char *)).

    - Ca ne sert à rien d'ajouter explicitement un "\0" à la fin de test chaines. strcat s'en charge.

    - Ta fonction to_varchar() est vraiment inutilement compliquée. Par exemple, F ne sert à rien (et en plus tu alloues tout un buffer juste pour mettre un ' dedans...). Il faut aussi éviter de faire des séries de strcat() : chaque strcat() parcours entièrement la chaine, ce qui est inutile puisque tu pourrais savoir directement où commencer l'écriture (utilise memccpy() à la place de strcat()).

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2011
    Messages : 13
    Par défaut
    Une solution plus simple serait d'utiliser strtok de la librairie string.h:
    http://www.cplusplus.com/reference/c...string/strtok/

    Après avec un petit algo confectionné maison tu devrais y'arriver sans trop de difficulté...

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Ta question n'est pas assez précise :

    - Les champs numériques sont-ils toujours des entiers ? sans signe ? en base 10 ? des 'blancs' peuvent-ils précéder ou suivre le nombre ?

    - Quel est le rôle des 'blancs' ? Dans ton exemple, le troisième et le dernier champ contiennent un blanc et pourtant tu les considères comme vide : Tu les remplaces par NULL. De plus tu conserves le 'blanc'

    Dans cet exemple
    "   123,123  , 1 2 3 , +123,-456 ,123.4,123.4E5,-123.4E-5,123abc,abc123,, ,   ,','',' ','abc'"
    Quel est le résultat attendu ?

Discussions similaires

  1. Réponses: 12
    Dernier message: 01/09/2014, 16h12
  2. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  3. Modification d'une chaine de caractères
    Par banju dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2008, 12h07
  4. modification d'une chaine de caractère
    Par rlongin dans le forum SAS Base
    Réponses: 2
    Dernier message: 21/05/2008, 17h55
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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