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 :

Ajout de '\' dans une string


Sujet :

C++

  1. #1
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut Ajout de '\' dans une string
    Bonjour j'ai une string contenant un chemin d'accès tu style "c:\toto\titi.txt"et j'aimerais doublé le \ et avoir une chaine du style "c:\\toto\\titi.txt".

    Comment faire ???

    j'ai tout d'abort essayer avec le code de la faq c++ que j'ai modifié pour mon besoin : http://c.developpez.com/faq/cpp/?pag...#STRING_tokens
    Code : 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
    		string val;
    		string mot;
    		val = "";
     
    		string spath;
    		spath = path.substr(0,path.find('\n'));
    		istringstream iss( spath );
    		while ( getline ( iss, mot, '\' ) )
    		{
    			if(val == "")
    			{
    				val = mot;
    			}
    			else
    			{
    				val = val + "\\" + mot;
    			}
    		}
    mais j'ai une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    c:\dev\anamorphose\anamorphosedlg.cpp(333) : error C2001: newline in constant
    c:\dev\anamorphose\anamorphosedlg.cpp(333) : error C2015: too many characters in constant
    une idée ???
    est mon ami !!!

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    '\' '\\'

    En général il n'est nécessaire de doubler les anti-slashs que dans les chaînes que tu écris toi-même dans le coder source, pourquoi cherches-tu à le faire sur une variable ?

  3. #3
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    parce que j'arrive pas ouvrir un fichier avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ifstream file(File.c_str());
    je n'ai aucun flux dans file
    est mon ami !!!

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Si le nom de fichier n'est pas en dur dans le code alors aucune raison de doubler les anti-slashs (ou d'utiliser des slashs -- beaucoup de gens oublient cette solution).
    Doubler un anti-slash est nécessaire dans le code source car en C++ l'anti-slash sert à introduire un caractère spécial.

    Bref, l'erreur d'ouverture doit venir d'ailleurs.

  5. #5
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    c'est bizarre parce que quant je met le fichier en dur avec les doubles \\ ca marche mais kan je recupere le chemin d'accès ds une string ca marche plus avec un seul \ donc je ne vois pas d'autre raisons mais je peut tjs passer à coté mais j'aimerais pouvoir essayer pour voir si c ca
    est mon ami !!!

  6. #6
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Tu as regardé ce que contenais ta string (par un simple cout << File) ?

  7. #7
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    pour cette ligne ifstream file(File.c_str());

    File contient le chemin d'accès mais file rien
    est mon ami !!!

  8. #8
    Membre régulier Avatar de dockurt2k
    Inscrit en
    Juillet 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juillet 2006
    Messages : 91
    Points : 98
    Points
    98
    Par défaut
    Tu est sur que c'est vraiment le chemin du fichier, pas de truc qui manque?du genre des charactéres accentuées.

    Dans le doute essaye sur un chemin basique : c:\test.txt

  9. #9
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    Non c'est pas ca j'ai une chaine vide meme avec un c:\toto.txt donc il ouvre pas le fichier
    est mon ami !!!

  10. #10
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Tu pourrais nous donner un code minimal qui permet de reproduire l'erreur ?

  11. #11
    Membre régulier Avatar de dockurt2k
    Inscrit en
    Juillet 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juillet 2006
    Messages : 91
    Points : 98
    Points
    98
    Par défaut
    pour cette ligne ifstream file(File.c_str());

    File contient le chemin d'accès mais file rien
    Je croyais que file n'était pas vide.

    Non c'est pas ca j'ai une chaine vide meme avec un c:\toto.txt donc il ouvre pas le fichier
    C'est quel chaîne qui est vide, je n'en voit qu'une et c'est File. file n'est pas une chaîne. Bon ou alors je confond tout et un flux c'est la même chose qu'une chaîne

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    la question qui tue : est-ce que tu es sûr que File.c_str() pointe sur un path/fichier qui existe ?

    sinon as-tu essayé avec des noms de variables moins "communs" que file et File, peut-être y a-t-il une confusion de la part du compilateur avec des choses déjà définies dans les entêtes système...
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  13. #13
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    Mon code marche parfaitement si je stipule l'adresse en dur mais pas si elle est dynamique (qui est bonne) je pense que c'est parceque il veux les \\ et pas \ je ne vois aucune autre raison
    est mon ami !!!

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par Dark-Water
    Mon code marche parfaitement si je stipule l'adresse en dur mais pas si elle est dynamique (qui est bonne) je pense que c'est parceque il veux les \\ et pas \ je ne vois aucune autre raison
    Il y en a pourtant une autre, celle-là n'a pas de sens !
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  15. #15
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par rigobert
    Il y en a pourtant une autre, celle-là n'a pas de sens !
    moi pas avoir compris
    est mon ami !!!

  16. #16
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Au risque de me répêter...

    Citation Envoyé par Eusebe
    Tu pourrais nous donner un code minimal qui permet de reproduire l'erreur ?
    Citation Envoyé par Dark-Water
    moi pas avoir compris
    C'est simplement que ton problème ne viens pas des "\\" mais d'ailleurs...

  17. #17
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    Code : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
     
    void CAnamorphoseDlg::OnButton1() 
    {
    	// TODO: Add your control notification handler code here
     
    	CFile File;
    	char* fichier;
     
    		CString OpenFilter;
    OpenFilter = "Text File (*.*)|*.*||";
     
    CFileDialog FileOpenDialog(
          TRUE,
          NULL,
          NULL,
          OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST,
          OpenFilter,                       // filter
          AfxGetMainWnd());               // the parent window 
    if(FileOpenDialog.DoModal()==IDOK)
        {
     
            VERIFY(File.Open(FileOpenDialog.GetPathName(),CFile::modeRead));
     
        }
    else
    {
    	return;
    }
     
    		string path = FileOpenDialog.GetPathName();
    	/*    const char* fil = new char[path.size()];
    		fichier = new char[path.size()];
    		fil = path.c_str();
    		strcpy(fichier,fil);
         */
    		string val;
    		string mot;
    		val = "";
     
    	/*	string spath;
    		spath = path.substr(0,path.find('\n'));
    		istringstream iss( spath );*/
    	    /*   while ( getline ( iss, mot, '\' ) )
    		{
    			if(val == "")
    			{
    				val = mot;
    			}
    			else
    			{
    				val = val + "\\" + mot;
    			}
    		}
    	*/
    		objet.Importer(spath);
     
    }
    Code : 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    void Object::Importer(string File)
    {
    	ifstream file(File.c_str());
    	string substring1;
    	string substring2;
     
    	bool ispoints = true;
    	int nbreligne =0;
    	string line;
     
    	while ( ! file.eof() )
    	{
    		file >> line;
     
     
    		if(line == "POINTS")
    		{
    			file>>line;
    			// créer un flux à partir de la chaîne à convertir			
    			int nombre = convertint(line);
     
    			this->CreateTab(nombre);
    		}
    		else if(line =="MESHES")
    		{
    			ispoints = false;
    			nbreligne=0;
    			file >> line;
     
    			int nombre = convertint(line);
     
    			this->CreateTabTri(nombre);
    			file >> line; //on sent fou car deja recuperer le nbre de points
    		}
    		else
    		{
     
    			if (ispoints)
    			{
     
    				double nombre = convertdou(line);
    				points[0][nbreligne] = nombre;
    				pts[0][nbreligne] = nombre;
     
     
    				file >> line;
    				nombre = convertdou(line);
    				//DEBUG cout << "nbre" <<nombre<<endl;
     
    				points[1][nbreligne] = nombre ;
    				pts[1][nbreligne] = nombre ;
     
    				file >> line;
     
    				nombre = convertdou(line);
     
    				points[2][nbreligne] = nombre ;
    				pts[2][nbreligne] = nombre  ;
    				//DEBUG cout << "nbre" <<nombre<<endl;
    				ptsTrie[nbreligne] = nbreligne;
    				nbreligne++;
     
    			}
    			else
    			{
     
    				file >> line;
    				//On ignore
     
    				int nombre = convertint(line);
    				triangles[0][nbreligne] = nombre-1; //car indice tableau commence à 0 au lieu de 1
    				tgl[0][nbreligne] = nombre-1;
     
    				file >> line;
     
    				nombre = convertint(line);
    				triangles[1][nbreligne] = nombre-1;
    				tgl[1][nbreligne] = nombre-1;
     
    				file >> line;
    				nombre = convertint(line);
    				triangles[2][nbreligne] = nombre-1;
    				tgl[2][nbreligne] = nombre-1;
     
    				nbreligne++;
    			}
     
    		}
     
    	}
     
    	file.close();
    }
    Voila j'espere que ca vous suffira
    est mon ami !!!

  18. #18
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Ben non.
    C'est pas compilable (CAnamorphoseDlg inconnu) et en plus, tu mélange des std::string avec du MFC...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    je pense que ceci n'est pas bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	string path = FileOpenDialog.GetPathName();
    	const char* fil = new char[path.size()];
    	fichier = new char[path.size()];
    	fil = path.c_str();
    	strcpy(fichier,fil);
    parce que :

    1. la mémoire allouée pour fichier est insuffisante --> corruption lors de strcpy().
    2. fil est alloué pour rien : le pointeur est réaffecté derrière sur path.c_str() --> fuite.

    As-tu essayé de passer directement path (retourné par FileOpenDialog.GetPathName()) à Object::Importer() ?
    "La forme même des Pyramides prouve que de tous temps, les ouvriers n'ont jamais pensé qu'à en faire de moins en moins."

    G. CLEMENCEAU

  20. #20
    Membre habitué Avatar de Dark-Water
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2006
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 142
    Points : 159
    Points
    159
    Par défaut
    arg si tu veux mon code t pas couché

    il est particulierement long et effectivement j'utilise les MFC et des string car j'ai developpé une partie portable et une partie pas du tout cette appli est un mixte de 2 applications donc c un peut le bordel
    est mon ami !!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. Ajout aléatoire d'une String dans une balise XML à partir d'un tableau de String
    Par chebmo1986 dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 19/03/2009, 11h21
  2. mettre un entier dans une string
    Par kinder29 dans le forum SL & STL
    Réponses: 14
    Dernier message: 14/02/2005, 11h54
  3. [DOM] sauver dans une String
    Par hocinema dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 28/09/2004, 21h44
  4. [Débutant][JSP] Ajout des caractères à une String...
    Par Henkyl dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 04/03/2004, 16h30
  5. [Syntaxe] mettre des ' dans une string ?
    Par souch dans le forum Débuter
    Réponses: 4
    Dernier message: 14/08/2003, 16h26

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