C++ urgence svp

Résolu/Fermé
yanlou Messages postés 119 Date d'inscription dimanche 30 septembre 2007 Statut Membre Dernière intervention 11 août 2010 - 4 juil. 2008 à 16:54
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 7 juil. 2008 à 16:06
Bonjour,
salut, désolé j'ai fais une erreur tot aleur.
j'ai u fichier txt qui contient des chaine de caracté, exemple :

CDFX = RFRPAD7
CDFX = RFRPAD8/A8
CDFX = CDXRTD3/A3
CDFX = FGDTRE2
CDFX = ATZRSD5/A5

je veux savoir si il existe une fonction en c++ qui me permet d'avoir le resultat suivant:

CDFX = RFRPAD7
CDFX = RFRPAD8
CDFX = RFRPAA8
CDFX = CDXRTD3
CDFX = CDXRTA3
CDFX = FGDTRE2
CDFX = ATZRSD5
CDFX = ATZRSA5

merçi d'avance pour votre aide

31 réponses

sophieeeeee Messages postés 1395 Date d'inscription jeudi 5 juin 2008 Statut Membre Dernière intervention 18 septembre 2008 53
4 juil. 2008 à 16:59
je ne crois pas mais bon je suis novice en C++ je serai toi je lirai mon fichier texte je le mettrai dans un buffer a chaque retour chariot je lis et j'enregistre.Je compare les caractère avec un / et si jamais c'est pareil alors le rajoute une ligne je copie ce que j'ai lu moins 2 caractère puis j'ajoute ce qu'il y a après le / plus facile a dire qu'a faire je te l'accorde.
1
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
4 juil. 2008 à 17:03
Tout à fait et pour faire tout ça il y a toutes les fonctions qu'il faut:
http://www.iut-orsay.fr/dptinfo/Pedagogie/Roger.Astier/divers/clString.html
0
(Pabix) Messages postés 578 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 27 octobre 2009 81
4 juil. 2008 à 16:56
Bonjour, même avec un bon éditeur de texte, tu peux faire une macro pour ça, ou alors avec sed ou awk ; je te laisse le soin de regarder la documentation de awk qui est un utilitaire assez puissant pour cela !
0
purplerainman Messages postés 70 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 7 juillet 2008 3
4 juil. 2008 à 16:57
bien sûr que c'est faisable je t'enverrai peut-être en mp la réponse si j'ai le temps..
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
4 juil. 2008 à 17:00
Salut,

Pourquoi pas ici?
0
purplerainman Messages postés 70 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 7 juillet 2008 3 > kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016
4 juil. 2008 à 17:07
parce que ça déborde du cadre de l'intervention "vite fait". Il faut expliquer etc. Maintenant si tu veux le faire, je te laisse le soin... D'ailleurs je dois y aller,

a+
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527 > purplerainman Messages postés 70 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 7 juillet 2008
4 juil. 2008 à 17:10
Ben non pourquoi ça dépasse le cadre de l'intervention? :-)
0
(Pabix) Messages postés 578 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 27 octobre 2009 81
4 juil. 2008 à 17:04
avec vim, si tu tapes exactement (<Esc> représente la touche Échap, et les retours à la ligne représentent Entrée)
/\/
qay0ni
<Esc>PxxXnq@a@a@a@a

etc. pour répéter la macro, tu peux aussi faire 100@a pour la répéter 100 fois p.ex.
0

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

Posez votre question
(Pabix) Messages postés 578 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 27 octobre 2009 81
4 juil. 2008 à 17:07
Petite précision : à la fin, pour enregistrer le fichier et quitter, taper ZZ.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
4 juil. 2008 à 17:24
je ne pense pas.
0
yanlou Messages postés 119 Date d'inscription dimanche 30 septembre 2007 Statut Membre Dernière intervention 11 août 2010 13
7 juil. 2008 à 01:22
merçi les gas mais j'ai tjr ce problém, et j'ai pa trouvé de solution
j'ai esséyé avec le code suivant mais ça me donne rien


#include <string>
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
// le constructeur de ifstream permet d'ouvrir un fichier en lecture
ifstream fichier("test.txt");

if (fichier) // ce test échoue si le fichier n'est pas ouvert
{
string ligne; // variable contenant chaque ligne lue

// cette boucle s'arrête dès qu'une erreur de lecture survient
while (getline(fichier,ligne))
{
// afficher la ligne à l'écran
cout << ligne << endl;

// Récupération de la position du slash
size_t pos=ligne.find_first_of("/");

// la sous-chaine de gauche donne le 1er entier
int a=atoi(ligne.substr(0,pos).data());

// la sous-chaine de droite, le second
int b=atoi(ligne.substr(pos+1).data());

// supression du surplus
string sousligne=ligne.substr(0,pos);


// Affichage du résultat
cout << a << " " << b << endl;
}
}

fichier.close();
}
0
purplerainman Messages postés 70 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 7 juillet 2008 3
7 juil. 2008 à 01:29
tu comprends pourquoi je te disais que ça ne se ferait pas comme ça? T'as pas daigné m'écouter et me contacter et là tu rames et lundi approche...
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527 > purplerainman Messages postés 70 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 7 juillet 2008
7 juil. 2008 à 02:28
Youhou! C'est un forum communautaire, on ne fait pas d'aide privée ici. Pourquoi ne pas répondre dans cette discussion? Au contraire il a bien fait de ne pas te contacter. La réponse devrait profiter à d'autres qui pourraient avoir des problèmes similaires.
0
(Pabix) Messages postés 578 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 27 octobre 2009 81
7 juil. 2008 à 02:13
Si tu regardais mon code avec vim ? Il marche, je l’ai testé.
0
(Pabix) Messages postés 578 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 27 octobre 2009 81
7 juil. 2008 à 04:58
Bon, je te donne une deuxième méthode avec awk :

1. Télécharge awk pour windows ici : http://gnuwin32.sourceforge.net/packages/gawk.htm
2. Crée un fichier dans le même dossier que ton fichier original, et qui contient ceci (fais un copier-coller)
BEGIN {
	nc=2
	FS="/" ;
}
NF==1 { print }
NF>1 {
	print $1
	i = 2 ;
	while (i <= NF) {
		print substr($1, 1, length($1) - nc) $i; 
		i++ ;
	}
}

3. Ouvre la ligne de commande et va dans le répertoire (dossier) de tes deux fichiers : je suppose que tu sais utiliser la commande cd
4. Tape
awk -f FICHIER_SCRIPT FICHIER_TEXTE > FICHIER_SORTIE

où Fichier_script est le fichier contenant le code du point 2, fichier_texte est ton fichier de départ, et fichier_sortie est le fichier final.

Bon, là j’espère que tu t’en sortiras. Si tu as des notions de ligne de commande ça devrait te poser aucun problème, et j’ai testé, ça marche.
0
yanlou Messages postés 119 Date d'inscription dimanche 30 septembre 2007 Statut Membre Dernière intervention 11 août 2010 13
7 juil. 2008 à 10:39
salut, je vous remercie mais moi je doit travailél avec c++ alor si quelqu'un peux m'aidé, parsque le code que j'esséye d'ecrir doit fonctioné mais je comprend pas ou ça cloche ?!!
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 juil. 2008 à 10:55
Salut.
tu ne vérifie pas que find a trouver quelque chose (dans ton cas utilise find plutot que find_first_of).
C'est quoi cet accès à .data() ??
Je ne comprends pas l'intéret de atoi().
0
yanlou Messages postés 119 Date d'inscription dimanche 30 septembre 2007 Statut Membre Dernière intervention 11 août 2010 13
7 juil. 2008 à 12:40
Bonjour,
j'ai un fichier txt, avec ce code j'obtien pour une chaine comme ça

AFRZSA2-D2
ADDSEA3

le resultat

AFRZSA2 AFRZSD2
ADDSEA3 ADDSEA3 // je veux pas que cette chaine ce double je veux avoir ADDSEA3 ça doit se fair avec une boucle mais j'arrive pas de le faire !!

mon code :

#include <string>
#include <fstream>
#include <iostream>
using namespace std;
int main()
{

ifstream fichier("slash.txt");

if (fichier)
{
string ligne;


while (getline(fichier,ligne))
{

size_t pos=ligne.find_first_of("-");


string sousligne1=ligne.substr(0,pos);


string sousligne2=ligne.substr(pos+1);

string sousligne3=sousligne1.substr(0,sousligne1.size()-2).append(sousligne2);


cout<< sousligne1 << " " << sousligne3 << endl;

}
}

fichier.close();
}
0
yanlou Messages postés 119 Date d'inscription dimanche 30 septembre 2007 Statut Membre Dernière intervention 11 août 2010 13
7 juil. 2008 à 12:41
svp si ya quelqu'un qui pourrai m'aidé pour fair la boucle parsque je bloque...
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
7 juil. 2008 à 14:00
tu n'as qu'à lire ce que je t'ai écris !
find et pas find_first_of
vérifie le résultat de ton find(), car si tu as des lignes sans tiret, c'est normal que ça foire.
au lieu de rabacher "aidez moi" réfléchi un peu à ce que tu fais.
0
(Pabix) Messages postés 578 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 27 octobre 2009 81
7 juil. 2008 à 12:45
Salut yanlou, inspire toi de mon code avec awk, parce que là, tu brûles en C.
0
yanlou Messages postés 119 Date d'inscription dimanche 30 septembre 2007 Statut Membre Dernière intervention 11 août 2010 13
7 juil. 2008 à 12:49
salut, bein tu sais mnt je bloque totalment !!!
si ta une solution alor à l'aide !!
0
(Pabix) Messages postés 578 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 27 octobre 2009 81
7 juil. 2008 à 12:53
indice : si ça ne trouve pas le tiret, find_first_of("-") devrait renvoyer -1. Teste cette valeur.
0
yanlou Messages postés 119 Date d'inscription dimanche 30 septembre 2007 Statut Membre Dernière intervention 11 août 2010 13
7 juil. 2008 à 13:10
je trouve tjr pa la solution, ya quelqu'un qui peux m'aidé !!!
0
yanlou Messages postés 119 Date d'inscription dimanche 30 septembre 2007 Statut Membre Dernière intervention 11 août 2010 13
7 juil. 2008 à 13:40
Bonjour.
j'ai rajouter ce test :
if (sousligne1 == sousligne3) {
cout << sousligne1 << endl;
}
else {
cout<< sousligne1 << " " << sousligne3 << endl;
}

mais tjr j'ai le meme resultat
0
(Pabix) Messages postés 578 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 27 octobre 2009 81
7 juil. 2008 à 13:44
Bonsoir Yanlou, ça serait une idée, mais sousligne1 et sousligne3 sont des pointeurs. Pour comparer les chaînes de caractères utilise

if (strcmp(sousligne1, sousligne3)) {…}
0
yanlou Messages postés 119 Date d'inscription dimanche 30 septembre 2007 Statut Membre Dernière intervention 11 août 2010 13
7 juil. 2008 à 13:46
j'ai mis if (strcmp(sousligne1, sousligne3)) {…} est ça m'adonné l'erreur suivante :

F:\stage\slach.cpp(26) : error C2664: 'strcmp' : cannot convert parameter 1 from 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' to 'const char *'
0
(Pabix) Messages postés 578 Date d'inscription mercredi 18 mai 2005 Statut Membre Dernière intervention 27 octobre 2009 81
7 juil. 2008 à 13:48
ah, ce sont des objets string… pardon dans ce cas :

if (sousligne1.compare(sousligne3)) {
//… si pas égales
}
else {
//… si égales
}
0