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é

, 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"
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é
Bonne journée
Publié : jeu. 12/juil./2007 10:09
par Backup
pas mal
voici une version sans tableau

sans pointeur
bref du basic standard !!
; 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
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

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 !!

j'ai utilisé l'etoile comme separateur au lieu de espace
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 ":"
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

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 ":"

)
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 !

Publié : jeu. 12/juil./2007 20:07
par Backup
Publié : sam. 14/juil./2007 7:40
par Kwai chang caine
Merci à tous les 3.
Moi qui croyait avoir trouvé un code simple
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
Mon BROSSDEN d'amour vu que t'es bien lancé t'aurais pas un code complet avec un seul caractere
Encore merci les copains

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 !

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