une fonction nom propre en purebasic

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
yvhon
Messages : 2
Inscription : jeu. 26/févr./2015 19:09

une fonction nom propre en purebasic

Message 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.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: une fonction nom propre en purebasic

Message 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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: une fonction nom propre en purebasic

Message 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
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: une fonction nom propre en purebasic

Message 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.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
yvhon
Messages : 2
Inscription : jeu. 26/févr./2015 19:09

Re: une fonction nom propre en purebasic

Message 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.
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: une fonction nom propre en purebasic

Message 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.
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: une fonction nom propre en purebasic

Message 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
Répondre