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++Builder Discussion :

Doublage des \ en C++Builder [Débutant]


Sujet :

C++Builder

  1. #1
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 395
    Par défaut Doublage des \ en C++Builder
    Bonjour,
    je suis nouveau en C++Builder (et en C++ d'aillleurs) et je m'aperçois qu'il faut doubler les \ dans certaines fonctions ou instructions.

    Par exemple ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1->Picture->LoadFromFile("c:\\32.jpg");
    Existe-t'il une fonction qui fait ce doublage/dédoublage car
    1) pour la ligne de code ci-dessus, je dois passer le nom complet de l'image à afficher en paramètre, en format non doublé

    2) je dois créer des répertoires temporaires après test de leur existence
    3) je dois utiliser shellExecute pour convertir mes fichier .PCX en .JPG via le répertoire temporaire avant de les afficher.

    Si en plus, quelqu'un pouvait me dire quel est le code pour extraire les parametres passé à mon programme et les mettre dans des variable (string), cela m'aiderait beaucoup.

    Merci d'avance.

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Ce n'est pas un problème de CBuilder, mais de C/C++.
    Le caractère '\' sert à 'protéger' le caractère suivant. Ainsi '\n' affiche une nouvelle ligne, '\r' affiche un retour chariot, '\t' affiche une tabulation, '\"' affiche '"'...
    Donc si tu mets juste 'c:\32.jpg', le compilateur va essayer d'interpréter le caractère '3' comme une fonction, qui n'existe d'ailleurs pas.
    Pour pouvoir afficher le caractère '\' dans une chaîne, il faut le doubler => '\\'. Dans la chaîne ainsi générée, il n'apparaîtra qu'une seule fois, donc pour un chemin de fichier/dossier, ça ne posera pas de problème.

    EDIT :
    Pour les paramètres de ton programme, ils sont présents dans le main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main( int argc, const char* argv[] )
    argc est le nombre d'arguments du programme
    argv est un tableau de chaînes de caractères contenant les arguments.
    Il faut savoir que le premier argument est le nom du programme lui-même (en chemin relatif ou absolu, selon l'implémentation). Donc si on lance un programme 'toto' sans arguments, argc vaudra 1 et argv[0] vaudra 'toto'
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 395
    Par défaut
    Bonjour et merci pour ta réponse.

    Je bute cependant sur le problème suivant alors :

    Le parm 1 de mon programme c'est lui-même avec son chemin complet dasn mon cas.

    Mais, ce nom complet ne dispose pas des slashs doublés.

    Si je veux utiliser cette valeur dans une fonction, je dois avoir doublé les \.
    Comment faire facilement cette opération.

    En VBA je connais Split et aussi Replace, mais je ne trouve pas le moyen d'appeler Replace dans mon Code C++Builder.

    J'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <SysUtils.hpp>      // Intègre TStringBuilder
    Pour pouvoir Utilise Replace qui est est contenue, mais cela calle chaque fois à la compilation.

    Ceci ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label2->Caption = TStringBuilder* __fastcall Replace(ParamStr(1), "\\", "\\\");
    --->[BCC32 Erreur] UnitImage.cpp(25): E2108 Utilisation impropre de typedef 'TStringBuilder'

    et ceci non plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label2->Caption = Replace(ParamStr(1), "\\", "\\\");
    --->[BCC32 Erreur] UnitImage.cpp(25): E2268 Appel à une fonction non définie 'Replace'

    ----------Edit-----
    J'ai trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <AnsiStrings.hpp>   // Intègre Fonction Ansi String
    	Label2->Caption = ParamStr(1);
    	Label2->Caption = AnsiReplaceText(Label2->Caption, "\\", "\\\\");

  4. #4
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Euh, dans la chaîne donnée en paramètre, tu n'as pas à remplacer les '\' par '\\', car ils sont déjà doublés (sinon tu ne les verrais même pas). C'est uniquement lorsque tu construis une chaîne toi-même que tu dois les doubler.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  5. #5
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 395
    Par défaut
    Bonsoir Sylvain,
    Euh, dans la chaîne donnée en paramètre, tu n'as pas à remplacer les '\' par '\\', car ils sont déjà doublés (sinon tu ne les verrais même pas)
    D'après mes tests, ce n'est pas le cas car j'affiche le parametre, non doublé, puis je double et alors j'effectue un LoadPicture qui fonctionne (et j'afficle le resultat qui est bien doublé)

    J'en déduis donc que soit je ne te comprends pas, soit c'est différent de ce que tu expliques.

    Je n'ai pas le code sous la main mais je peux le montrer demain matin.

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut Godzestla
    Peut etre avec " Stringreplace " , pour remplacer un ou plusieur caracteres dans une chaine, fait une recherche dans le Forum il y a des exemples

  7. #7
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 395
    Par défaut
    Salut Blondelle,
    J 'ai utilise AnsiReplaceText comme montre ci-dessus et cela fonctionne.
    Je dois encore écrire une fonction et la prototypes pour pouvoir la réutiliser facilement, mais comme je débute, je dois encore un peu chercher pour cela.

  8. #8
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Quand tu affiches une chaîne de caractères, si tu vois le caractère '\' (que ce soit dans le debugger ou dans une console ou n'importe où ailleurs), c'est parce qu'il a été protégé à la création (par un autre '\' donc).
    De même, si dans une chaîne de caractères tu vois le caractère '"' ou une nouvelle ligne, ou un retour chariot, ou une tabulation, c'est parce qu'ils ont été protégés à la création (toujours par un '\').
    Ce n'est pas différent de ce que j'explique, c'est que lorsque tu affiches la chaîne, le caractère protégé est affiché tel quel. C'est lors de la construction de la chaîne que tu dois protéger les caractères spéciaux (comprendre : qui ont une fonction particulière). Une fois la chaîne construite, tu n'as pas besoin de reprotéger ces caractères avant de l'utiliser.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  9. #9
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 395
    Par défaut
    Merci pour cette précision.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/04/2012, 16h57
  2. requetes eviter les doublages des listes
    Par gremy63 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/05/2008, 11h23
  3. Problème de doublage des bordures
    Par Azharis dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 01/11/2007, 16h05
  4. comment dessiner des courbes en c++builder?
    Par bob75018 dans le forum C++Builder
    Réponses: 8
    Dernier message: 17/01/2006, 20h19
  5. Y as il des fichiers temporaires sous builder
    Par Moutonstar dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/12/2004, 14h24

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