Page 2 sur 2

Re: Caractère non pris en charge par l'EDI

Publié : mer. 12/déc./2012 15:29
par gibet_b
falsam a écrit :Si cette astuces fonctionne chez toi, alors le code suivant fonctionne aussi :)
Eh bien non, après vérification, elle ne fonctionne pas sous Mac ! Et "l'équivalent", la palette de caractère, a le même effet que lorsque je copie/colle : un point d'interrogation pour certains signe de ponctuation...

Je pense que je vais créer une fonction qui permet de vérifier si un chiffre est compris dans une série d'intervalles. Ça peut toujours être utile, et je viendrai la mettre ici.

Re: Caractère non pris en charge par l'EDI

Publié : mer. 12/déc./2012 15:44
par falsam
gibet_b a écrit :Eh bien non, après vérification, elle ne fonctionne pas sous Mac ! Et "l'équivalent", la palette de caractère, a le même effet que lorsque je copie/colle : un point d'interrogation pour certains signe de ponctuation...
Je pense que je vais créer une fonction qui permet de vérifier si un chiffre est compris dans une série d'intervalles. Ça peut toujours être utile, et je viendrai la mettre ici.
N'ayant pas de mac je ne pouvais pas tester.

Le code précédent fonctionne pas sous Mac OS ?

Pourrais tu préciser dans ta signature que tu es sous Mac Os ?

Re: Caractère non pris en charge par l'EDI

Publié : mer. 12/déc./2012 15:59
par falsam
gibet_b a écrit :Je pense que je vais créer une fonction qui permet de vérifier si un chiffre est compris dans une série d'intervalles.
Exemple
Tester un nombre compris entre 20 et 39 (ne necessite pas forcement un regex)

Code : Tout sélectionner

*RegMatch = CreateRegularExpression(#PB_Any ,"([2-3][0-9])")
Debug MatchRegularExpression (*RegMatch, "35") ; Retournera vrai
Debug MatchRegularExpression (*RegMatch, "15") ; Retournera faux
Combiné avec ou "|" : Tester un nombre compris entre 20 et 39 ou 50 et 75

Code : Tout sélectionner

*RegMatch = CreateRegularExpression(#PB_Any ,"([2-3][0-9]|[5-7][0-5])")
Debug MatchRegularExpression (*RegMatch, "71") ; Retournera vrai

Re: Caractère non pris en charge par l'EDI

Publié : mer. 12/déc./2012 17:51
par Backup
gibet_b a écrit :Bonjour à tous,

Comme je l'ai dit dans un autre sujet, je me frotte à PureBasic, en transposant une petite application que j'ai créé pour aider ma femme à faire des textes à trous.

Je parcours le texte soumis caractère par caractère, et pour détecter s'il s'agit d'un caractère de ponctuation, voilà comment je faisais sous RealBasic :

1/ Je déclarais une constante contenant tous les signes de ponctuation (ou en tout cas ceux qui m'intéressent) :

Code : Tout sélectionner

Const PONCTUATION = ".,;?!()"“”«»':-—–’"
2/ Je vérifiais si le caractère en cours figurait dans la contante pour savoir si c'était un signe de ponctuation :

Code : Tout sélectionner

If InStrB(PONCTUATION,caractere) > 0
Le hic, c'est que certains caractère sont remplacés par des "?" lorsque je copie/colle dans l'EDI de RealBasic. Notamment, une des deux formes d'apostrophe( ’ ), mais aussi les différents tirets ( — et – ) et certaines formes de guillemets( “” ).


hum , d'une façon plus traditionnel de coder (sans RegEx) , la Fonction Findstring() peut etre indiqué pour ce type de recherche


ce code retourne le caractere recherché, ainsi que sa position dans la phrase (ou le Text )
facile a partir de la de coder un "remplacement" (replacestring())
ou bien n'importe quoi d'autre ...
ps: j'ai laissé ta Phrase de caracteres...tel quelle ...

on peut aussi ajouter une contrainte de recherche qu'a partir du Xem caractere du text ..

ça reste tres rapide, meme si c'est pas du Regex ... ;)


pour éviter les "?" compile en Unicode ... ;)


Code : Tout sélectionner

Declare.s recherche_ponctuation(text.s)

text.s=" Toto est (perdu), ou bien 'trouvé' ? "
MessageRequester("info", recherche_ponctuation(text.s))






procedure.s recherche_ponctuation(text.s)
	PONCTUATION.s = ". , ; ? ! ( ) ? ? « » ' : - ? ? ? "+chr(34)
	for i=1 to len(PONCTUATION.s)
		x_car.s=StringField(PONCTUATION.s,i," ")
		pos=findstring(text.s,x_car.s,1)
		if pos<>0
			resultat.s=" le caractere : "+" '"+x_car.s+"' "+ "a été trouvé a la position :"+str(pos)+chr(10)+"  Dans la phrase :"+chr(10)+text.s
			ProcedureReturn resultat.s
		endif
	next i
EndProcedure
; EPB

Re: Caractère non pris en charge par l'EDI

Publié : mer. 12/déc./2012 18:22
par graph100
gibet_b a écrit :Etant donné que lorsque je copie/colle certains caractères dans l'EDI, ils sont remplacés par des « ? », je ne peux pas faire un simple :

Code : Tout sélectionner

IF caractère = "—"
(ou une quelconque recherche de ce caractère dans une chaine composée de tous les signes de ponctuation qui m'intéresse)

Mon idée est donc de voir si le code ASCII du caractère saisi par l'utilisateur se situe dans telle ou telle plage, ou s'il est égal à telle valeur.
Je viens de penser que tu n'as pas besoin d'écrire les caractère en 'dur' dans ton code !
Il te suffit d'initialiser ta chaine avec la fonction Chr(), par exemple, j'ai souvent besoin de mettre des guillemets dans une chaine, sauf que Pb reconnais les guillemets comme un délimiteur de chaine. Je sais qu'il y a une constante qui a la valeur des guillemets mais je ne m'en rappelle jamais, donc j'écris ça :

Code : Tout sélectionner

TXT.s = "une petite citation : " + Chr(34) + "Les regex sont pratiques" + Chr(34)
Debug TXT
Donc pour écrire : "un texte «entre» guillemets"

Code : Tout sélectionner

TXT.s = "un texte "+Chr(171)+"entre"+Chr(187)+" guillemets"
Et comme le dit Dobro, si tes caractères sont de l'unicode, il ne faut pas oublier à compiler en unicode