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

MFC Discussion :

[.NET] ne pas prendre en compte les "0"


Sujet :

MFC

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut [.NET] ne pas prendre en compte les "0"
    Bonjour à tous,
    je suis nouveau dans ce forum et j'aurais besoin d'aide.
    je code sous visual Dotnet c++

    et enfait j'ai dans un fichier des numéros que j'aimerai récupérer mais les premeirs numéros peuvent au début comporter des 0.
    par exemple : 0012547896
    ou 012588996

    il faudrai que j'arrive à ce que ces 0 ne soit pas pris en compte, et au maximum je ne peut avoir que trois 0 avant mon premier chiffre

    voila

    ciao

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    il faudrait plus de précisions pour te répondre. Comment lis-tu ?

    Si tu lis une chaine de caractères à partir d'un fichier, il te suffira de la convertir en nombre pour éliminer les zéros non significatifs

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    je lit avec FileStream, et après j'utilise readLine pour lire ma ligne

    mais ce qu'il y a c'est que les premiers chiffre peuvent etre : 00T128598
    ce n'est pas obligé qu'il y est que des chiffre

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    et à partir de ca, tu voudrais obtenir quoi ?

  5. #5
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    j'aimerais obtenir T128598
    que les 0 ne soient pas pris en compte

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    alors, le principe est simple,
    il suffit de boucler sur la chaine, et tant qu'on trouve un 0 non significatif, on tient pas compte.
    Quelque chose comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	String ^s = "0000T128598";
    	int i=0;
    	while (i<s->Length && s[i]=='0')
    		i++;
    	s = s->Substring(i);
    	Console::WriteLine(s);

  7. #7
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    ok mais ce qu'il y a c'est que je ne connais pas le numéro.
    et j'ai essayé ce que tu m'a dit mais il me mets comme erreur :
    '['*: impossible d'effectuer une opération arithmétique de pointeur sur le pointeur __gc 'System::String __gc *'

    et ce que tu ma dit c'est bien String* s ou String^ s

    merci

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    j'ai fait l'exemple en C++/CLI, c'est à dire en "C++ .Net 2.0"

    donc, il faut le convertir dans l'ancien c++ .Net

    utiliser donc String * à la place de String ^
    Il est possible aussi que la comparaison à '0' ne fonctionne pas, et qu'il faille passer par String::Compare(...) à la place

  9. #9
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    ok mais cette fonction sert pour comparer alors que moi c'est plutot qu'il faut que je supprime les 0, non ?

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    cette fonction parcours la chaine de gauche à droite tant qu'on trouve uniquement des 0
    dès qu'on trouve autre chose qu'un zéro, on s'arrete et on note la position du premier caractère différent de 0
    et à partir de cette position, on réaffecte à la chaine la partie de la chaine à partir du premier caractère diférent trouvé (substring)

    essaie

  11. #11
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    oula, y a pas autre chose de plus simple? lol
    non mais sinon le String::Compare() , il faut que je le place où dans la boucle while ?

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    ben, c'est quand meme le b.a.ba ...

    où pourrait-on le mettre d'après toi le compare ? le but étant de comparer la lettre en cours d'analyse avec le chiffre zéro

  13. #13
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    ok donc il faut que je compare le i et ma chaine de caractéres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    String *s = "0000T128598";
     
    int i=0;
     
    String* test = Convert::ToString(i);		
     
    String::Compare(test,s);	
     
    i++;
    s = s->Substring(i);
    mais la il menleve que un '0'.
    et le i++; je comprend pas très bien a quoi il sert ?

  14. #14
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    je suis pas spécialiste .net mais visilblement ce que tu fais c'est que tu compare la 1er caractère qui est 0 et tu renvoies le reste de la chaine mais comme tu ne boucle pas bah tu compare pas le reste des caractères

  15. #15
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    avant de faire du C++ .Net, il est important quand meme d'avoir assimilé les bases du c++

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	String *s = "0000T128598";
    	int i=0;
    	while (i<s->Length && String::Compare(s->Substring(i,1),"0")==0)
    		i++;
    	s = s->Substring(i);
    s contiendra T128598 en sortie de boucle

  16. #16
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    ok merci pour ta réponse le code marche nikel.

    mais je vais essayer de bien l'assimiler merci

    bye

  17. #17
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Points : 121
    Points
    121
    Par défaut
    i++ c'est pour incrémenter i (i-- pour décrementer .... c'est meme du c ca ...)

    String *s = "0000T128598";
    int i=0;
    while (i<s->Length && String::Compare(s->Substring(i,1),"0")==0)
    i++;
    s = s->Substring(i);
    i sera l'indice du premier indice a conserver.
    i<s->Length : tu veridie que tu n'a pas atteint la fin de la chaine de caractère.
    s->Substring(i,1) : tu recupère une sous chaine de caractère de longueur 1 a l'emplacement i, donc le caractère a l'endroit ou tu lit
    String::Compare(...,"0") : tu compare la chaine ... a la chaine "0"

    Le résultat.
    Si ta chaine est "000T12"
    i = 0, ...="0", donc on est pas en fin et Compare != 0 alors on incremente i.
    i = 1, ...="0", donc on est pas en fin et Compare != 0 alors on incremente i.
    i = 2, ...="0", donc on est pas en fin et Compare != 0 alors on incremente i.
    i = 3, ...="T", donc on est pas en fin et Compare == 0 alors on arrete.

    tu recupère la souchaine qui commence a l'indice 3 soit "T12".

    Pour faire cela, c'est un minimum.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/11/2011, 14h18
  2. [XL-2007] [Formules] Somme.Prod ne pas prendre en compte les celulles en erreur
    Par hardballer dans le forum Excel
    Réponses: 2
    Dernier message: 25/01/2010, 18h20
  3. Réponses: 2
    Dernier message: 16/07/2009, 17h39
  4. [XHTML] Ne pas prendre en compte les balises XHTML
    Par simnitch dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 18/08/2005, 15h58

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