Page 1 sur 1

une fonction nom propre en purebasic

Publié : mer. 04/mars/2015 14:33
par yvhon
Purebasic semble être un langage puissant. Mais pour convertir la première lettre de chaque mot d'une phrase en majuscule je n'ai pas trouvé de fonction prévue. Vba Excel a une fonction qui permet faire ça simplement tout comme l'extraction des mots vers une variable tableau, sans se lancer dans les expressions régulières. C'est pourtant un basic très basic.
J'aimerais savoir quelles solutions utiliser avec Purebasic.

Merci de bien vouloir me renseigner.

Re: une fonction nom propre en purebasic

Publié : mer. 04/mars/2015 15:11
par falsam
Bonjour et bienvenue.

UCase() & Mid() : Transformer la première lettre en majuscule

Code : Tout sélectionner

Buffer.s = "une premiere chaine de mot"

;Transformer la premiere lettre en majuscule
Result.s = UCase(Mid(Buffer, 1, 1)) + Mid(Buffer, 2)

Debug Result
Split() : Extraction des mots vers une variable tableau

Code : Tout sélectionner

Procedure Split(Array Array.s(1), String.s, Delimiter.s)
  Protected File, i, j, Buffer.s
      
  j = CountString(String, Delimiter)  
  ReDim Array(j)
  For i=1 To j+1  
    Array(i-1) = StringField(String, i, Delimiter)
  Next
EndProcedure

;-Zone de test
Dim Jours.s(0)

Split(Jours(), "lundi mardi mercredi jeudi vendredi samedi dimanche", " ")

;Vérification
For n=0 To ArraySize(Jours())
  Debug Jours(n)
Next
C'est un sujet que j'ai abordé sur ce lien
:arrow: http://www.purebasic.fr/french/viewtopi ... 75#p166475

Re: une fonction nom propre en purebasic

Publié : mer. 04/mars/2015 18:27
par Fig
bienvenue Yvhon,

Tu as bien conscience, que même en Vb il n'existe pas une fonction déja toute prête pour toutes les transformations possibles sur une phrase, je suppose.
Pb est beaucoup plus rapide que Vb, mais si tu veux travailler principalement sur du texte, tu devras faire toi même les fonctions avancées que tu souhaites.

Tu souhaites mettre en majuscule chaque première lettre des mots d'une phrase. Voici ma résolution de ce problème:

Code : Tout sélectionner

Macro majuscule(phrase_)
phrase_=UCase(Mid(phrase_, 1, 1)) + Mid(phrase_, 2) ;passe en majuscule la première lettre de la phrase
For i_=97 To 97+25 ;test les lettres de a à z et les passe en majuscule
ReplaceString(phrase_, " "+Chr(i_), " "+Chr(i_-32),#PB_String_InPlace)
Next i_
EndMacro

GrandePhrase.s="ceci est une phrase test"
majuscule(GrandePhrase)
Debug GrandePhrase

Re: une fonction nom propre en purebasic

Publié : mer. 04/mars/2015 19:07
par Ar-S
Salut,

Il y a plusieurs façon de faire ce genre de procédure. Celle de fig met une maj à chaque mot (tout court).

Pour une phrase, tu peux utiliser ça.
Ici on detecte un point + un espace. Il te suffit de faire un 1er scan de ton document et de lister par exemple chaque phrase.

Code : Tout sélectionner

GrandePhrase.s="ceci est une phrase test."

Procedure.s Maj_it(phrase.s)
  
  Res.s = StringField(phrase,1,". ")
  LettreMaj.s   = UCase( Left(res,1) )
  Reste.s         = Mid(res,2,Len(res)) 
  Resultat.s = LettreMaj+reste
  
  ProcedureReturn Resultat
EndProcedure

Debug Maj_it(GrandePhrase.s)
Pour être plus propre je t'orienterai plutôt vers les expressions régulières pour détecter les caractères faisant office de fin de phrase.

Bonne continuation.

Re: une fonction nom propre en purebasic

Publié : mer. 04/mars/2015 19:42
par yvhon
Merci pour vos réponses.

la différence entre ReplaceString de Purebasic et Replace de vba me rassure :
Purebasic n'est pas une perte de temps.

Re: une fonction nom propre en purebasic

Publié : jeu. 05/mars/2015 10:15
par Mesa
Ah mince, fig m'a devancé.

Ce petit code permet d'utiliser les lettres accentuées majuscules et marche en unicode.

Code : Tout sélectionner

Buffer.s = "ça, une première chaine de mot"
ReplaceString(Buffer, Left(Buffer,1), UCase(Left(Buffer,1)), #PB_String_InPlace, 1, 1)
Debug Buffer
M.

Re: une fonction nom propre en purebasic

Publié : jeu. 05/mars/2015 10:46
par MLD
Bonjour Yvhon, bienvenue parmis nous.

Contrairement a ce que tu as dit. PB n'est pas un basic "très basic",mais un basic très évolué, bien plus puissant que VBa, et surtout moins usine a gaz.
Une fois compilé, il produit des fichiers EXE trés petits et rapides.
Jette un oeil dans la documentation, et dans le forum Français et US pour te faire une idée.
Avant je programmais en VB6, depuis que j'ai connus PB. Je n'utilise plus que lui avec satisfaction. Si tu achète la licence, ça m'éttonerais beaucoup que tu regrette ton achat.
Salutations
Michel