C++ urgence svp

Résolu
yanlou Messages postés 119 Date d'inscription   Statut Membre Dernière intervention   -  
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   -
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 1396 Date d'inscription   Statut Membre Dernière intervention   53
 
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
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   Statut Membre Dernière intervention   81
 
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   Statut Membre Dernière intervention   3
 
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Salut,

Pourquoi pas ici?
0
purplerainman Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   3 > kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention  
 
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > purplerainman Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
Ben non pourquoi ça dépasse le cadre de l'intervention? :-)
0
(Pabix) Messages postés 578 Date d'inscription   Statut Membre Dernière intervention   81
 
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   Statut Membre Dernière intervention   81
 
Petite précision : à la fin, pour enregistrer le fichier et quitter, taper ZZ.
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
je ne pense pas.
0
yanlou Messages postés 119 Date d'inscription   Statut Membre Dernière intervention   13
 
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   Statut Membre Dernière intervention   3
 
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > purplerainman Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   81
 
Si tu regardais mon code avec vim ? Il marche, je l’ai testé.
0
(Pabix) Messages postés 578 Date d'inscription   Statut Membre Dernière intervention   81
 
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   Statut Membre Dernière intervention   13
 
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 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention   13
 
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   Statut Membre Dernière intervention   13
 
svp si ya quelqu'un qui pourrai m'aidé pour fair la boucle parsque je bloque...
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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   Statut Membre Dernière intervention   81
 
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   Statut Membre Dernière intervention   13
 
salut, bein tu sais mnt je bloque totalment !!!
si ta une solution alor à l'aide !!
0
(Pabix) Messages postés 578 Date d'inscription   Statut Membre Dernière intervention   81
 
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   Statut Membre Dernière intervention   13
 
je trouve tjr pa la solution, ya quelqu'un qui peux m'aidé !!!
0
yanlou Messages postés 119 Date d'inscription   Statut Membre Dernière intervention   13
 
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   Statut Membre Dernière intervention   81
 
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   Statut Membre Dernière intervention   13
 
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   Statut Membre Dernière intervention   81
 
ah, ce sont des objets string… pardon dans ce cas :

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