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 :

remplir un AnsiString avec 10 caractères d'un tableau de char


Sujet :

C++Builder

  1. #1
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 021
    Points
    2 021
    Par défaut remplir un AnsiString avec 10 caractères d'un tableau de char
    Bonjour,

    Aprés avoir eu besoin de convertir un Ansistring en char* et aprés avoir trouvé la solution dans la FAQ et les cours de Gilles Louise, je me retrouve face au besoin inverse sans trouver la solution...

    J'ai un immense tableau de char et je souhaite mettre dans un AnsiString 10 caractères succèssifs de ce tableau.

    en imaginant le tableau et l'ansistring :
    char tableau[200] = "xxxxxxxxxxxxxxxxTOTOVABIENxxxx....xx" ;
    Ansistring resultat ;

    je souhaite obtenir
    resultat = "TOTOVABIEN"

    Merci par avance
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  2. #2
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    Bonjour,

    Je te propose cette solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      char tableau[200] = "xxxxxxxxxxxxxxxxTOTOVABIENxxxx....xx" ;
      AnsiString resultat ;
     
      resultat = ((AnsiString)tableau).SubString(17, 10) ;
     
      ShowMessage(resultat) ;
    }
    et ça marche !!

    @+
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  3. #3
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    C'est tres simple :
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    int i ;
    char tableau[200] = "................" ;
    AnsiString resultat = "" ;
    for(i=indexpremierCaractere;i<10;i++){
      resultat += tableau[i] ;
    }
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  4. #4
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Grilled

    la solution de kmaniche doit etre mieux.
    Quand une réponse vous a été utile, pensez à utiliser le nouveau système de notation

    Lisez le magazine de developpez.com.
    Mes tutos : http://pottiez.developpez.com

    La FAQ BCB -> 642 Questions/Réponses, si vous voulez participer, contactez moi. Aide de BCB6 en français

    N'oubliez pas que l'aide existe et est affichée sous simple pression de la touche F1 , une touche c'est plus rapide que tout un message .

  5. #5
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 021
    Points
    2 021
    Par défaut je ne m'en sors pas
    Merci pour vos reponses

    Je galère un peu avec les formats
    La solution de kmaniche me plait effectivement plus puisque plus simple.

    Ca marche dans l'exemple mais ca ne fonctionne pas quand je fais ca sur une tableau publique déclaré ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    Sauvegarde = new char[TailleSauvegarde];
    avec const long int TailleSauvegarde = 250000 ;
    et __fastcall TForm1(TComponent* Owner);
    char *Sauvegarde ;

    sur ce tableau, quand j'execute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      AnsiString Nom ;
      Nom = ((AnsiString)Sauvegarde).SubString(17, 20) ;  
      ShowMessage(Nom ) ;
    je recupère une chaine vide

    Malgrés tout, cela n'a pas l'air de merdouiller à ce niveau là.
    Si je regrde individuellement un des caractères
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label1->Caption = Sauvegarde[17] ;
    j'ai bien egalement un caractère vide...

    Le truc c'est que si j'enregistre le tableau "Sauvegarde" dans un fichier en faisant ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void __fastcall TForm1::EnregistrerTableauDansFichier()
    {
    //enregistrer les data dans le fichier
    TMemoryStream *MS;
    MS=new TMemoryStream();
    MS->Write(Sauvegarde,TailleSauvegarde);
    //MS->ReadBuffer(Sauvegarde,AdresseDebutTableLOGS);
    MS->SaveToFile(NomFichierSauvegarde);
    delete MS;     //on libère le flux
     
    StatusBar3->Panels->Items[0]->Text = NomFichierSauvegarde;
    }
    et si je regarde ce fichier avec le bloc note j'ai bien des caractères là ou il faut !! (un B en l'occurence en position 17)

    Au sec.

    Merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  6. #6
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 937
    Points : 2 021
    Points
    2 021
    Par défaut
    rectification, on obtien bien un "B" quand on test le tableau individuellement en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label1->Caption = Sauvegarde[17] ;
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Points : 1 148
    Points
    1 148
    Par défaut
    Je ne sais pas si ça joue mais une chaine de caractère en char* doit se terminer par un 0 (pas le caractère 0 mais la valeur 0).
    Donc si ta chaine ne se termine pas par 0 tu risques d'avoir des pbs...
    Neilos

Discussions similaires

  1. retrouver unesuite de caractères dans un tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 17
    Dernier message: 12/07/2005, 23h43
  2. problème avec le caractère saut de ligne ...
    Par vbcasimir dans le forum Administration
    Réponses: 2
    Dernier message: 17/06/2004, 16h35
  3. remplir une table avec UTL_FILE.GET_LINE
    Par delphim dans le forum SQL
    Réponses: 9
    Dernier message: 12/03/2004, 10h15
  4. Chaînes avec des caractères accentués dans Interbase
    Par François Marliac dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/03/2004, 22h39
  5. [TChart] comment remplir un histogramme avec du rouge strié.
    Par :GREG: dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/08/2002, 09h37

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