Convertir char en const char * [Résolu]

Signaler
Messages postés
21
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
7 janvier 2010
-
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
-
Bonjour tout le monde,

Ma question est dans la titre, est-il possible de convertir un char en un const char*?
Je m'explique.

Je recupere des lettres dans chaine ce qui me donne quelque chose comme ça:
chaine[1] = A
chaine[2] = B
etc...

Je voudrais écrire chacune de ces lettres dans un fichier .txt qui se nomme FichierCompteurNews.
Je peux utiliser la fonction fputs pour écrire mais en paramétre je ne peux mettre que chaine, hors je ne veux pas toute la chaine juste un petit morceau, qui va de chaine[15] à chaine[30].

Ce que j'aimerai c'est faire ça : fputs(chaine[i],Fichier_SelectionCompteurNews)
Mais j'ai une erreur -> error C2664: 'fputs' : impossible de convertir le paramètre 1 de 'char' en 'const char *'

Je travail sous Microsoft Visual c++.
Quelqu'un aurait - il une solution à m'apporter?

36 réponses

Messages postés
21
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
7 janvier 2010

J'ai trouvé la reponse que je cherchais.
Je voulais ecrire un char dans un .txt
Il suffisait tous simplement d'utiliser la fonction fputc(carcatere[i],fichier)
et le tour est joué!
Messages postés
21
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
7 janvier 2010

Desole pour la taille du texte je n'avais pas fait attention
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009

salut,

est ce qu'il y a encore des caractères après le 31eme ?

si oui, zut!
si non : tu peux faire ca : fputs(chaine+i,Fichier_SelectionCompteurNews);   // ca décale le pointeur de i

Loki
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009

donc pour si oui je propose quelque chose comme :

memcpy(chaine2, chaine+i, 16);   // 16 caractères entre 15 et 30
fputs(chaine2, ...);                        // on refait pareil mais juste avec le bout de chaine voulu

Loki
Messages postés
21
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
7 janvier 2010

Oui y'en a encore derriére.

Les lettres (textes) que je veux recupérer se situe au milieu en fait.

Je ne connais pas la longueur du texte que je veux recupérer, mais je connais exactement ce que je ne veux pas.

J'ai ceci dans chaine : Arial color= #000066 size=4> copieur-couloir
</TD></TR>

Je voudrais supprimer ça : Arial color =#000066 size=4>
et ça :</TD></TR>

et ecrire (ici) copieur-couloir dans un fichier .txt
Messages postés
21
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
7 janvier 2010

Comment je dois déclarer chaine2?

Si je le declare en void*, il me dit : fputs : impossible de convertir le parmètre 1 de void* en const char*
Si je le declare en const char* il me dit : memcpy : impossible de convertir le paramètre 1 de const char* en void*
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009

je suppose que tu n'as pas forcément toujours les mêmes balises html ? par exemple au lieu de tu peux avoir voire les deux à la suite ?

dans ce cas, c'est assez barbare mais j'ai trouvé cette solution :

la seule différence entre copieur-couloir et c'est qu'il n'y a pas de balise à copieur-couloir. donc avec strstr() tu peux de déplacer le long de ta chaine de '>' en '>'. Ainsi tu fais une boucle qui te décale tant que le caractère qui suit '>' est un '<'. dès que tu tombe sur autre chose, normalement c'est bon.
                                    tu saute jusque là :    puis là
                          |  |
Arial color=#000066 size=4>copieur-couloir</TD></TR>
                                             |
ensuite tu lis tes caractères juqu'à retomber sur un '<'                           ici :

qu'est ce que t'en penses ?

Loki
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009

et merde c'est tout décalé
Messages postés
21
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
7 janvier 2010

Je vais essayer ta solution...Ca peut le faire! du moins je l'espére!
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009

tiens moi au courant

Loki
Messages postés
21
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
7 janvier 2010

Si ça peut faciliter les choses je recupére un .txt qui contient ça :

Arial color= #000066 size=4> copieur-couloir
</TD></TR>
JavaScript>write_value("101", 326646);</SCRIPT>
JavaScript>write_value("103", 3155);</SCRIPT>
JavaScript>write_value("102", 329801);</SCRIPT>
Arial color =#000066 size=4>iR&nbsp;C3380</TD></TR>
JavaScript>write_value("112", 833);</SCRIPT>
JavaScript>write_value("109", 45029);</SCRIPT>
JavaScript>write_value("124", 15817);</SCRIPT>
JavaScript>write_value("122", 5458);</SCRIPT>
JavaScript>write_value("101", 54555);</SCRIPT>

Dans ce .txt je scann ligne par ligne. Les balises sont toujours les mêmes. La seul chose qui change est ce qu'il y a entre les balises et et les nombres qui se trouvent aprés "101", "103", etc...

Le resultat que je voudrais obtenir serai ça :
copieur-couloir 101 326646 103 3155 102 329801
iRC3380 112 833 109 45029 124 15817 122 5458 101 54555
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009

ça complique les choses, bah à ta place j'essaierai de jouer avec des trucs dans le style de ce que je t'ai déjà proposé. essaie de mixer.

Loki
Messages postés
21
Date d'inscription
mercredi 6 juin 2007
Statut
Membre
Dernière intervention
7 janvier 2010

y'a pas moyen de dire tu cherche ce terme là : "Arial color=#000066 size=4>" ou "
</TD></TR>" ou "JavaScript>write_value("" ou " ", " ou celui ci " );</SCRIPT> "
 et si tu le trouve, tu le supprime de la chaine?
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009

ah bah tout est possible en prog, il suffit de le faire. :p
tu peux faire une fonction qui supprime tous les termes contenus entre <> déja ça te réduit le bazar
ensuite tu termines en cherchant le terme write_value et s'il existe tu vire encore tout ce qui te gène et pis voilà.

- sscanf() permet de chercher des termes divers dans une chaine (attention toutefois, si tu recherches une sous-chaine, il s'arrête à chaque espace rencontré)
- strstr() te permet de rechercher un caractère et retourne le pointeur sur ce caractère dans la chaine

Loki
Messages postés
9
Date d'inscription
vendredi 17 janvier 2003
Statut
Membre
Dernière intervention
14 juin 2007

Bonjour,
avec CString, c 'est assez simple.

CString CHOR= "Arial color=#000066 size=4> copieur-couloir </TD></TR>";
CString CH_Recherche ="Arial color=#000066 size=4>";

 int pos=CHOR.Find(CH_Recherche);

        if (pos>=0)
        {
            CHOR.Delete(pos,CH_Recherche.GetLength());
        }

       

fred33
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009

ça reste quand même mieux de faire une fonction générique, qui pourrait fonctionner avec nimporte quelles balises, non ?
à l'école on nous apprend à faire des choses qui pourraient se réutiliser pour d'autres applications, afin de gagner du temps.

Loki
Messages postés
9
Date d'inscription
vendredi 17 janvier 2003
Statut
Membre
Dernière intervention
14 juin 2007

Absolument !
Tout depend de ce que tu veux faire. Je propose une solution qui fonctionne dans un environnement particulier.
Mais je concede qu'il y a forcement plus élégant !
fred33
Messages postés
9
Date d'inscription
vendredi 17 janvier 2003
Statut
Membre
Dernière intervention
14 juin 2007

Cependant, je ne suis pas certain qu'il soit necessaire de réinventer la roue systematiquement. Une des richesses du C++, c'est aussi d'avoir la possibilité de gagner du temps en réutilisant le travail fait par d'autre.
Donc, en gros, dans le cadre d'un projet lié à un apprentissage particulier, tu as tout à fait raison. Mais si il s'agit d'obtenir un resultat rapidement face à un probleme donné, il est, à mon sens, utile de regarder l'existant.
(mais je dis ça, je dis rien :) )

fred33
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009

ce que je voulais dire c'était que le texte à rechercher ne serait pas forcément toujours "Arial color=#000066 size=4>".
si un jour il modifie son fichier txt ne serait ce que la couleur, il sera obligé de rééditer son code pour changer la couleur partout où ça sera nécessaire, c'est un peu dommage.

il vaut mieux chercher en aveugle et je ne suis pas sûr qu'avec ta méthode ça soit possible.
En revance tant que ça sera du code html, il y aura toujours des balises.

Loki
Messages postés
9
Date d'inscription
vendredi 17 janvier 2003
Statut
Membre
Dernière intervention
14 juin 2007

Oula !!! :)
C'est un exemple !!!
Il ne faut pas utiliser ce morceaux de code tel quel bien sur !!!

c'est juste une réponse à:
"y'a pas moyen de dire tu cherche ce terme là : "Arial
color=#000066 size=4>" ou
"
</TD></TR>" ou
"JavaScript>write_value("" ou " ", " ou celui ci " );</SCRIPT>
"
 et si tu le trouve, tu le supprime de la chaine?"

Mais il faut sans doute intégrer ça dans une fonction paramétrable.

fred33