Convertir char en const char *

Résolu
noulii Messages postés 21 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 7 janvier 2010 - 14 juin 2007 à 10:36
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 - 14 juin 2007 à 15:55
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

noulii Messages postés 21 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 7 janvier 2010
14 juin 2007 à 15:43
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é!
3
noulii Messages postés 21 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 7 janvier 2010
14 juin 2007 à 10:37
Desole pour la taille du texte je n'avais pas fait attention
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 11:01
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
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 11:04
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
noulii Messages postés 21 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 7 janvier 2010
14 juin 2007 à 11:08
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
0
noulii Messages postés 21 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 7 janvier 2010
14 juin 2007 à 11:15
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*
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 11:17
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
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 11:17
et merde c'est tout décalé
0
noulii Messages postés 21 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 7 janvier 2010
14 juin 2007 à 11:23
Je vais essayer ta solution...Ca peut le faire! du moins je l'espére!
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 11:24
tiens moi au courant

Loki
0
noulii Messages postés 21 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 7 janvier 2010
14 juin 2007 à 11:35
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
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 11:40
ç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
0
noulii Messages postés 21 Date d'inscription mercredi 6 juin 2007 Statut Membre Dernière intervention 7 janvier 2010
14 juin 2007 à 11:48
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?
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 11:58
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
0
cs_fred33 Messages postés 9 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 14 juin 2007
14 juin 2007 à 12:50
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
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 13:35
ç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
0
cs_fred33 Messages postés 9 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 14 juin 2007
14 juin 2007 à 13:42
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
0
cs_fred33 Messages postés 9 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 14 juin 2007
14 juin 2007 à 13:50
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
0
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
14 juin 2007 à 14:05
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
0
cs_fred33 Messages postés 9 Date d'inscription vendredi 17 janvier 2003 Statut Membre Dernière intervention 14 juin 2007
14 juin 2007 à 14:10
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
0