Afficher le premier caractère d'une chaine ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

Afficher le premier caractère d'une chaine ?

Message par Shinao »

Bonjour,

je souhaiterais tout simplement afficher le premier caractère d'une chaine (string), je n'ai trouvé que soit le chercher ou compté les caractères :x.

Merci d'avance
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

un petit code comme cela devrait correspondre à ce que tu cherches:

Code : Tout sélectionner

a$="c'est pourtant dans la doc"
Debug Left(a$,1)
Debug Len(a$)
ou de la même manière:

Code : Tout sélectionner

a.s="c'est vraiment dans la doc, si si"
Debug Left(a,1)
Debug Len(a)
Force et sagesse...
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

Message par Shinao »

Merci !
Et si je voudrais juste avoir par exemple le x de texte , comment faire ?

je veux dire sans connaître la variable aussi :x

merci d'avance
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

oui,

Code : Tout sélectionner

Debug FindString(a, "p", 1) 
cherche si il y a un 'p' dans la chaine, et renvoi sa position si oui, sinon renvoi 0.
Force et sagesse...
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

Message par Shinao »

Il faut que je fasse avec toutes les lettres alors :X ?

enfaite, je voudrais afficher caractère par caractère :x c'est possible ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

voici 2 autres façons de trouver ou de chercher un caractere dans une chaine

exemple numero 1
cette procedure retourne la position du caractere "X" dans la chaine a$

Code : Tout sélectionner

a$="text"

Procedure search(a$)
For i=1 To Len(a$)
  If Mid(a$,i,1)="x"
    Break
  EndIf 
Next i
ProcedureReturn i
EndProcedure


ce 2eme exemple retourne la position d"un caractere recherché au choix
dans une chaine
et retourne 0 si pas trouvé :)

Code : Tout sélectionner

Procedure exist(a$,car_cherche$)
  For i=1 To Len(a$)
    If Mid(a$,i,1)=car_cherche$
      trouve=1
      Break
    EndIf 
  Next i
  If trouve=1 
    ProcedureReturn i
  Else
    ProcedureReturn 0
  EndIf 
EndProcedure

a$="choux"
chaine_cherche$="x"
Debug "le caractere "+Chr(34)+car_cherche$+Chr(34)+" de la chaine "+Chr(34)+a$+Chr(34)+" ce trouve en Position " +Str(exist(a$,car_cherche$)) 
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

Message par Shinao »

Moi je veux afficher !!! Rrr ^^

mais j'ai trouvé le moyen si l'ordinateur est assez puissant pour un clearconsole() rapide.

Enfaite je voulais un effet de clavier à la console, et j'ai réussie , voici ma procédure pour pas la retaper (easy enfaite :x) :

Code : Tout sélectionner

Procedure effet_clavier(texte.s, time.d)

boucle.l = 1
carac.l = Len(texte)

Repeat
Print(Left(texte,boucle))
boucle = boucle + 1
Left(texte,boucle) 
Delay(100)
ClearConsole()
Until boucle = carac

Print(Left(texte,boucle)) ; pour le laisser sur l'écran

EndProcedure
edit : trop content de moi ma première procédure qui sert à quelque chose x)
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

Message par Shinao »

Re, pour améliorer ma procédure , je voudrais savoir comment mettre en options certaines variables comme dans openwindow (borderless) ?

merci d'avance

procédure amélioré pour moi car j'avais besoin d'un texte qui ne bouge pas au tout début ainsi qu'un temps d'attente :

Code : Tout sélectionner

Procedure effet_clavier(attente.d, texte.s, time.d, texte_static.s)
boucle.l = 1
carac.l = Len(texte)

Print(texte_static)
Delay(attente)

Repeat
If boucle > 1
Print(texte_static)
EndIf
Print(Left(texte,boucle))
boucle = boucle + 1
Left(texte,boucle) 
Delay(time)
ClearConsole()
Until boucle = carac

Print(texte_static)
Print(Left(texte,boucle))
EndProcedure
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Message par Geo Trouvpatou »

Salut.

Je ne sais pas si c'est ce que tu veux.

Code : Tout sélectionner

Procedure Open_Window(mesOptions.l)
    If OpenWindow(0, 0, 0, 380, 95, "Ma fenêtre", mesOptions)
       
    EndIf
EndProcedure

Open_Window(#PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

Message par Shinao »

Enfaite je voudrais qu'ils soient facultatif du genre justement mettre les options ou non. :p
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@Shinao

Je t'ai répondu ici.
En espérant que ça t'aide! :wink:

Ollivier
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

Message par Shinao »

Exellent merci ça va m'aider :]

Et pour revenir au thème de ce topic c'est la fonction de :

trouver et afficher un caractère par rapport à sa position en partant de droite ou de gauche, si quelqu'un à créer la procédure ou ça serait bien dans une version futur au moins,

merci pour toutes ces réponses !
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

Voila comment je ferais moi (J'ai essayer de commenter pour expliquer, mais paradoxalement ce sont les choses les plus simple à faire qui sont le plus dur à commenter :roll: )

Code : Tout sélectionner

; Chaine.s : Chaine à écrire
; AutoReturn.b : Optionnel, retour automatique à la ligne, #True par défaut
; Delay.i : Optionnel, temps d'attente en ms entre chaque charactères, 300 par défaut
; Retourne #True quand la procédure est terminée
Procedure.b AutoPrint(Chaine.s, AutoReturn.b = #True, Delay.i = 300)
  
  Repeat
    Pos + 1
    ; Afficher le charactère la position Pos de la chaine Chaine
    Print(Mid(Chaine, Pos, 1))
    ; Attente
    Delay(Delay)
  ; Jusqu'a ce que la position atteigne l'avant dernier charactère
  Until Pos = Len(Chaine) - 1
  
  If AutoReturn = #True
    ; Si AutoReturn = #True alors affichage du dernier charactère avec retour à la ligne
    PrintN(Mid(Chaine, Pos + 1, 1))
  Else
    ; Sinon affichage sans
    Print(Mid(Chaine, Pos + 1, 1))
  EndIf
  Delay(Delay)
  
  ProcedureReturn #True
EndProcedure


; Test
OpenConsole()
Delay(1000)

; Sans paramètres optionnels
AutoPrint("Test1")

; Avec le paramètre de retour à la ligne à #False
AutoPrint("Test2 ", #False)

; Avec le paramètre de retour à la ligne à #True et un temps d'attente de 600ms
AutoPrint("Test3", #True, 600)

Repeat : Delay(50) : Until Input()
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

Message par Shinao »

Exellent ! j'ai juste à cherche la définition de la fonction mid est c'est bon , c'est la fonction que je cherchais ! merciii beaucoup ^^
Répondre