Page 1 sur 1

Inversser une chaine mais pas les caractères

Publié : ven. 22/avr./2011 14:09
par dayvid
Salut !

J'ai crée une fonction pour inversser une chaine entière mais sans pour autent inversser les caractères (les mot)

Code : Tout sélectionner

; crée par monsieur Dieppedalle David en avril 2011

Chaine$ = " Abc Def Ghi, abc def ghi, ABC DEF GHI "

Procedure.s InversserChaine(Chaine$)
  
  PositionExtraction = 0
  Espace = 0
  
  ; je vais inversser la position de chaque caractère dans la Chaine$
  ; Je prends tout les caractères dans l'ordre a partire de la fin de la Chaine$
  ; exemple:   [   abc   def   ghi   jkl   ]
  ; donnera:   [   jkl   ghi   def   abc   ]
  
  ChaineInversser$ = ReverseString(Chaine$)
      
  Repeat
    
    PositionExtraction + 1
    caractere$ = Mid(ChaineInversser$, PositionExtraction, 1)
    
    If caractere$ = " " And Mot$ = ""
      Espace + 1 ; ont enregistre le nombre d'éspace
      
    ElseIf caractere$ > "" And caractere$ <> " "
      Mot$ = Mot$ + caractere$ ; ont enregistre le caractère
      
    ElseIf caractere$ = " " And Mot$ > " "
      PositionExtraction - 1
      Phrase$ + Space(Espace) + ReverseString(Mot$)
      Espace = 0
      Mot$ = ""
      
    ElseIf caractere$ = "" And Espace > 0
      Phrase$ + Space(Espace)
      
    ElseIf caractere$ = "" And Mot$ = ""
      Break  ; ont quitte la boucle car ya rien
      
    EndIf
    
  Until caractere$ = ""
  
  ProcedureReturn Phrase$
EndProcedure

Debug InversserChaine(Chaine$)

Re: Inversser une chaine mais pas les caractères

Publié : ven. 22/avr./2011 16:40
par Kwai chang caine

Code : Tout sélectionner

; crée par monsieur Dieppedalle David en avril 2011
; Réduit par Kcc

Chaine$ = " Abc Def Ghi, abc def ghi, ABC DEF GHI "

Procedure.s InverserChaine(Chaine$)
 
 For i = CountString(Chaine$, Space(1)) To 1 Step - 1
  Phrase$ + " " + StringField(Chaine$, i, Space(1))
 Next
 
 ProcedureReturn Phrase$
 
EndProcedure

Debug InverserChaine(Chaine$)
:wink:

Re: Inversser une chaine mais pas les caractères

Publié : ven. 22/avr./2011 17:50
par Demivec

Code : Tout sélectionner

; crée par monsieur Dieppedalle David en avril 2011
; Réduit par Kcc, Réduit par Demivec

Chaine$ = "[   abc   def   ghi   jkl   ]"

Procedure.s InverserChaine(Chaine$)
  Protected compte = CountString(Chaine$, " "), x$, premier = #True
  
  For i = compte To 0 Step - 1
    x$ = StringField(Chaine$, i + 1, " ")
    If x$ <> ""
      If Not premier
        Phrase$ + " " + x$
      Else
        Phrase$ + x$
        premier = #False
      EndIf 
    Else
      Phrase$ + " " ;reproduisez l'arrangement des espaces
    EndIf 
  Next
  
  ProcedureReturn Phrase$
EndProcedure

Debug InverserChaine(Chaine$)
:wink:

Re: Inversser une chaine mais pas les caractères

Publié : sam. 23/avr./2011 1:49
par Ar-S
Demivec a écrit :

Code : Tout sélectionner

; crée par monsieur Dieppedalle David en avril 2011
; Réduit par Kcc, Réduit par Demivec

Chaine$ = "[   abc   def   ghi   jkl   ]"

Procedure.s InverserChaine(Chaine$)
  Protected compte = CountString(Chaine$, " "), x$, premier = #True
  
  For i = compte To 0 Step - 1
    x$ = StringField(Chaine$, i + 1, " ")
    If x$ <> ""
      If Not premier
        Phrase$ + " " + x$
      Else
        Phrase$ + x$
        premier = #False
      EndIf 
    Else
      Phrase$ + " " ;reproduisez l'arrangement des espaces
    EndIf 
  Next
  
  ProcedureReturn Phrase$
EndProcedure

Debug InverserChaine(Chaine$)
:wink:
réduit ?

Re: Inversser une chaine mais pas les caractères

Publié : sam. 23/avr./2011 7:55
par Kwai chang caine
Oui je me suis dit la même chose :lol:
Mais je pense que notre ami DEMIVEC parlait de réduction par rapport à la première version :roll:

Je crois sans trop me tromper que DEMIVEC ne maitrise pas trop le français.
En tout cas j'suis content que quelqu'un de son niveau vienne nous voir 8)

Re: Inversser une chaine mais pas les caractères

Publié : sam. 23/avr./2011 12:43
par dayvid
Idem :)

Super vos coden :o , merci beaucoup :) , dic donc, drastiquement réduit mon code :lol:
mais petit problème :mrgreen:

Comment tu fait si c'est pas que des espaces mais pas exemple une tabulation
ou tous autre caractère INVISIBLE :lol:

Re: Inversser une chaine mais pas les caractères

Publié : sam. 23/avr./2011 15:55
par Demivec
dayvid a écrit :Comment tu fait si c'est pas que des espaces mais pas exemple une tabulation
ou tous autre caractère INVISIBLE :lol:

Code : Tout sélectionner

; crée par monsieur Dieppedalle David en avril 2011
; v3, Réduit par Kcc, corrigé par LSI, modifié par Demivec

Chaine$ = "[   abc   def   ghi   jkl   ]"
Chaine2$ = "[" + #tab$ + "abc" + #tab$ + "def" + #tab$ + "ghi" + #tab$ + "jkl" + #tab$ + "]"

Procedure.s InverserChaine(Chaine$, delimiter$ = " ")
  Protected compte = CountString(Chaine$, delimiter$), premier = #True
  
  For i = compte To 0 Step - 1
    If Not premier
      Phrase$ + delimiter$
    Else
      premier = #False
    EndIf
    Phrase$ + StringField(Chaine$, i + 1, delimiter$)
  Next
  
  ProcedureReturn Phrase$
EndProcedure

Debug InverserChaine(Chaine$)
Debug InverserChaine(Chaine2$, #tab$)
@Ar-S: Mon erreur. :oops:

@KCC: Salut.

Re: Inversser une chaine mais pas les caractères

Publié : sam. 23/avr./2011 17:30
par Le Soldat Inconnu
Je pense que Demivec n'a pas réduit mais corrigé une boulette de KCC, a savoir l'ajout d'un espace au début de la chaine alors qu'il n'y en avais pas.

LA correction de de Demivec en plus simple

Code : Tout sélectionner

; crée par monsieur Dieppedalle David en avril 2011
; Réduit par Kcc, corrigé par LSI

Chaine$ = " Abc Def Ghi, abc def ghi, ABC DEF GHI "

Procedure.s InverserChaine(Chaine.s)
	Protected Phrase.s = ""
	
	For i = CountString(Chaine, " ") To 1 Step - 1
		If Phrase <> ""
			Phrase + " "
		EndIf
		Phrase + StringField(Chaine, i, " ")
	Next
	
	ProcedureReturn Phrase
EndProcedure

Debug InverserChaine(Chaine$)

Re: Inversser une chaine mais pas les caractères

Publié : sam. 23/avr./2011 18:23
par Kwai chang caine
Le Soldat Inconnu a écrit :Je pense que Demivec n'a pas réduit mais corrigé une boulette de KCC, a savoir l'ajout d'un espace au début de la chaine alors qu'il n'y en avais pas.
Bah, loin de moi de vouloir te contredire, étant donné ton niveau comparé au miens :oops:
Mais y'a bien un espace au début et un a la fin dans la phrase d'origine non ???
Et pareil dans la phrase inversée, non ?? :roll:

Code : Tout sélectionner

Chaine$ = " Abc Def Ghi, abc def ghi, ABC DEF GHI "

Procedure.s InverserChaine(Chaine$)

For i = CountString(Chaine$, Space(1)) To 1 Step - 1
  Phrase$ + " " + StringField(Chaine$, i, Space(1))
Next

ProcedureReturn Phrase$

EndProcedure

Chaine2$ = InverserChaine(Chaine$)
Debug Chaine2$
Debug Len(Chaine$)
Debug Len(Chaine2$)
Debug ""
Debug Len(LTrim(Chaine$))
Debug Len(LTrim(Chaine2$))
Debug ""
Debug Len(RTrim(Chaine$))
Debug Len(RTrim(Chaine2$))
Debug ""
Debug Len(LTrim(RTrim(Chaine$)))
Debug Len(LTrim(RTrim(Chaine2$)))

Re: Inversser une chaine mais pas les caractères

Publié : sam. 23/avr./2011 19:40
par Le Soldat Inconnu
Mais ta méthode en rajoute, retire l'espace au début et à la fin de la chaine et tu verras.
Par contre, je pige mieux la correction de Demivec, la mienne n'est pas totalement bonne, mieux la sienne dans le cas ou le texte commence par un espace

Alors je recorrige, en plus il restait un bug que j'avais pas vu, c'est CountString(Chaine, " ") + 1 qu'il faut mettre

Code : Tout sélectionner

; crée par monsieur Dieppedalle David en avril 2011
; Réduit par Kcc, corrigé par LSI

Chaine$ = " Abc Def Ghi, abc def ghi, ABC DEF GHI "

Procedure.s InverserChaine(Chaine.s)
	Protected Phrase.s = "", Premier = 1
	
	For i = CountString(Chaine, " ") + 1 To 1 Step - 1
		If Premier = 0
			Phrase + " "
		Else
			Premier = 0
		EndIf
		Phrase + StringField(Chaine, i, " ")
	Next
	
	ProcedureReturn Phrase
EndProcedure

Debug "'" + InverserChaine(Chaine$) + "'"

Re: Inversser une chaine mais pas les caractères

Publié : dim. 24/avr./2011 2:56
par Demivec
@Le Soldat Inconnu: Excellent. J'ai corrigé mon dernier code.

Re: Inversser une chaine mais pas les caractères

Publié : mar. 26/avr./2011 14:41
par dayvid
Merci beaucoup tous le monde :oops: :D