Page 1 sur 1

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

Publié : jeu. 12/juil./2007 8:46
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

Publié : jeu. 12/juil./2007 10:09
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

Publié : jeu. 12/juil./2007 14:48
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

Publié : jeu. 12/juil./2007 17:31
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

Publié : jeu. 12/juil./2007 17:31
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

Publié : jeu. 12/juil./2007 17:48
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



Publié : jeu. 12/juil./2007 18:05
par brossden
Seul probleme Dobro c'est que cela ne marche pas !
mdr

Publié : jeu. 12/juil./2007 18:13
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 !!

Publié : jeu. 12/juil./2007 18:46
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)

Publié : jeu. 12/juil./2007 19:20
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 ? :)

Publié : jeu. 12/juil./2007 19:37
par brossden
Si je ne peux plus te charier, c'est même pas rigolot ! :lol:

Publié : jeu. 12/juil./2007 20:07
par Backup
brossden a écrit :Si je ne peux plus te charier, c'est même pas rigolot ! :lol:
Image
Image

Publié : sam. 14/juil./2007 7:40
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)

Publié : sam. 14/juil./2007 13:06
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:

Publié : sam. 14/juil./2007 23:33
par Kwai chang caine
:wink: :lol: :lol: