Découpe d'une phrase en champs à multiple séparateur[Résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Découpe d'une phrase en champs à multiple séparateur[Résolu]

Message par Kwai chang caine »

Bonjour les copains

Sous ce titre mortel de la balle qui dechire compliqué :lol: , j'ai fait une petit code qui permet de classer dans un tableau les divers champs d'une phrase délimité chacun par un caractere different.

Je voudrais savoir si l'oeuf que j'ai pondu est carré ou bien pour une fois il pourrait entrer dans un coquetier du commerce des "vrais programmeurs" :D

Ou tout simplement si on peux faire plus simple

Code : Tout sélectionner

Procedure DecoupeChamps(Phrase.s)
 
 Global Dim Champ.s(150)
 Global Dim Separateur.s(7)
 
 Separateur(1) = "!"
 Separateur(2) = "#"
 Separateur(3) = "%"
 Separateur(4) = "&"
 Separateur(5) = "@"
 Separateur(6) = "£"
 Separateur(7) = "§"
 
 For i = 1 To Len(phrase)
  
  Caractere.s = Mid(Phrase,i,1)
  
  For x = 1 To PeekL(@Separateur() - 8) - 1
   If Caractere = Separateur(x)
    NumeroChamp + 1
   EndIf
  Next
  
  Champ(NumeroChamp) + Mid(Phrase,i,1)
    
 Next
 a = 2
EndProcedure

DecoupeChamps("!Coucou#Je suis une% burne&en programmation@mais l'avantage£c'est que je ne peux §que m'améliorer")

For i = 1 To PeekL(@Separateur() - 8) - 1
 Debug Champ(i)
Next 
Merci de me donner votre avis éclairé :wink:
Bonne journée
Dernière modification par Kwai chang caine le sam. 14/juil./2007 7:51, modifié 2 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

pas mal :)

voici une version sans tableau :D
sans pointeur
bref du basic standard !! :D


     ; code Dobro
    
    Declare.s DecoupeChamps(Phrase.s)
     ; ***** relecture **********
    Phrase.s=DecoupeChamps( "!Coucou#Je suis une% burne&en programmation@mais l'avantage£c'est que je ne peux §que m'améliorer" )
    
     For i =1 To Len (Phrase)
         Debug StringField ( Phrase, i, " " )
     Next i
    
     ;****** procedure *************
     Procedure.s DecoupeChamps(Phrase.s)
         For i = 1 To Len (Phrase.s)
            test.s= Mid (Phrase,i,1)
             If test= "!" Or test= "#" Or test= "%" Or test= "&" Or test = "@" Or test = "£" Or test = "§"
                Phrase = ReplaceString (Phrase,test.s, " " )
             EndIf
         Next i
         ProcedureReturn Phrase.s
     EndProcedure
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci DOBRO de ton aide.

Par contre ton code ne fait pas tout a fait comme le miens.

Le miens donne la decoupe de la phrase a chaque caractere de separation :

Code : Tout sélectionner

!Coucou
#Je suis une
% burne
&en programmation
@mais l'avantage
£c'est que je ne peux 
§que m'améliorer
Le tiens separe chaque mots sans tenir compte des separateurs :

Code : Tout sélectionner

Coucou
Je
suis
une

burne
en
programmation
mais
l'avantage
c'est
que
je
ne
peux

que
m'améliorer
Par contre evidement le tiens est bien plus court
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

Bravo Kwai 8)

un truc cool aussi que tu peux te faire, c'est une fonction "split" :

split ("Kwai est un dieu en prog", " ") -> retourne un tableau de string en utilisant le deuxieme param comme séparateur

puis :

split ("Kwai.est.un,dieu,en.prog.il programme un bot", "., ")
-> retourne un tableau de string utilisant chaque caractère du deuxieme param comme séparateur

vachement pratique :D
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Puis je proposer à mon petit Kwai machin truc chose ...:


Code : Tout sélectionner

Phrase.s=("!Coucou#Je suis une% burne&en programmation@mais l'avantage£c'est que je ne peux §que m'améliorer")
Phrase=ReplaceString(Phrase,"#","!")
Phrase=ReplaceString(Phrase,"%","!")
Phrase=ReplaceString(Phrase,"&","!")
Phrase=ReplaceString(Phrase,"@","!")
Phrase=ReplaceString(Phrase,"$","!")
Phrase=ReplaceString(Phrase,"£","!")
Phrase=ReplaceString(Phrase,"§","!")
If Left(Phrase,1)="!" : Phrase=Mid(Phrase,2,Len(Phrase)):EndIf
Repeat 
  n+1
  tx.s= StringField(Phrase,n,"!")
Debug tx
Until tx=""
L'avantage c'est que l'ordre des séparateurs n'a aucune importance ainsi que le nombre de fois dans la phrase !

Le même avec pointeur !

Code : Tout sélectionner

Phrase.s=("!Coucou#Je suis une% burne&en programmation@mais l'avantage£c'est que je ne peux §que m'améliorer")
Separateurs.s="#%&@$£§"
x =@Separateurs
Repeat
  Phrase=ReplaceString(Phrase,PeekS(x,1),"!")
  x+1
Until PeekS(x,1)=""
If Left(Phrase,1)="!" : Phrase=Mid(Phrase,2,Len(Phrase)):EndIf
Repeat 
  n+1
  tx.s= StringField(Phrase,n,"!")
Debug tx
Until tx=""
en 14 lignes qui dit mieux !
Mdr
Denis

Bonne Jounée à tous
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Kwai chang caine a écrit : Le miens donne la decoupe de la phrase a chaque caractere de separation :

Le tiens separe chaque mots sans tenir compte des separateurs :
si tu veux garder les separateurs c'est facile !! :D
j'ai utilisé l'etoile comme separateur au lieu de espace :D


Declare.s DecoupeChamps(Phrase.s)
Phrase.s=DecoupeChamps( "!Coucou#Je suis une% burne&en programmation@mais l'avantage£c'est que je ne peux §que m'améliorer" )
For i =1 To Len (Phrase)
     Debug StringField ( Phrase, i, "*" )
Next i
Procedure.s DecoupeChamps(Phrase.s)
     For i = 1 To Len (Phrase.s)
        test.s= Mid (Phrase,i,1)
         If test= "!" Or test= "#" Or test= "%" Or test= "&" Or test = "@" Or test = "£" Or test = "§"
            p.s=p.s+ "*" +test
         Else
            p.s=p.s+ test.s
         EndIf
     Next i
     ProcedureReturn p.s
EndProcedure



brossden a écrit : en 14 lignes qui dit mieux !
Mdr
en utilisant les ":" :lol:

moi !! 1 ligne !!


Declare.s DecoupeChamps(Phrase.s): Phrase.s=DecoupeChamps( "!Coucou#Je suis une% burne&en programmation@mais l'avantage£c'est que je ne peux §que m'améliorer" ): For i =1 To Len (Phrase): Debug StringField ( Phrase, i, "*" ): Next i: Procedure.s DecoupeChamps(Phrase.s): For i = 1 To Len (Phrase.s): test.s= Mid (Phrase,i,1): If test= "!" Or test= "#" Or test= "%" Or test= "&" Or test = "@" Or test = "£" Or test = "§" : p.s=p.s+ "*" +test: Else : p.s=p.s+ test.s: EndIf : Next i: ProcedureReturn p.s: EndProcedure


brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Seul probleme Dobro c'est que cela ne marche pas !
mdr
Denis

Bonne Jounée à tous
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

brossden a écrit :Seul probleme Dobro c'est que cela ne marche pas !
mdr
8O 8O ben si !!
Kwai veux avoir le signe qui apparait en debut de mot !!
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Oui mais teste ton prog moi avec j'ai des ligne blanches à foison !

encore plus court :

Code : Tout sélectionner

Phrase.s ="!Coucou#Je suis une % burne&en programmation@mais l'avantage£c'est que je ne peux §que m'améliorer"
Separateurs.s="!#%&@$£§"
For n=1 To Len(Phrase)
  c.s=Mid(Phrase,n,1)
  x = FindString(Separateurs,c,1)
  If x > 0 Or n=Len(Phrase)
    Debug Mid(Phrase,d,n-d)
    d=n
  EndIf
Next 
et sans ":"
:o)
Denis

Bonne Jounée à tous
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

brossden a écrit :Oui mais teste ton prog moi avec j'ai des ligne blanches à foison !
tu sais bien qu'une ligne blanche est facile a retirer !
de la a dire que mon prg ne marche pas !, il y a un pas non ? :)
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Si je ne peux plus te charier, c'est même pas rigolot ! :lol:
Denis

Bonne Jounée à tous
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

brossden a écrit :Si je ne peux plus te charier, c'est même pas rigolot ! :lol:
Image
Image
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci à tous les 3.

Moi qui croyait avoir trouvé un code simple :oops:

Je m'en doutais un peu, c'est pourquoi je vous ai demandé votre avis (Et j'ai tres bien fait).

Je vais mettre ça en place.

Il va falloir que je comprenne un jour que c'est pas parce que pure a (noir) plein de fonctions qu'il faut absolument que je les cases toutes dans chaque code :lol:

Mon BROSSDEN d'amour vu que t'es bien lancé t'aurais pas un code complet avec un seul caractere :lol: :lol: :lol:

Encore merci les copains 8)
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

KCC !!

je n'ai de (.)(.) ni de (_v_) pour que tu puisse sm'appeller "MON BROSSDEN D'AMOUR"

Mdr

Pour ce qui est du code mini j'ai bien un octet de 8 bits mais saurais tu quoi en faire ! :lol: :lol:
Denis

Bonne Jounée à tous
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

:wink: :lol: :lol:
Répondre