PureBasic

Forums PureBasic
Nous sommes le Lun 12/Nov/2018 19:00

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 12 messages ] 
Auteur Message
 Sujet du message: Résolu J'ai raté quelque chose ?
MessagePosté: Lun 05/Nov/2018 16:49 
Hors ligne

Inscription: Ven 23/Avr/2004 18:08
Messages: 296
Localisation: Hérault 34190 Laroque
Bonjour à tous,
J'essaye d'utiliser EscapeString et son inverse UnescapeString dans mon programme et je m'aperçois que ça ne change absolument rien à la chaine de caractères.
Voici un petit exemple:
Code:
A.s="JE SUIS UNE CHAINE ORDINAIRE"
Debug Len(A)
Debug Len(EscapeString(A,#PB_String_EscapeInternal)); là c'est pas normal si on en crois la fonction... :x
A=A+Chr(10)+chr(13)
Debug Len(A)
Debug Len(UnescapeString(A,#PB_String_EscapeInternal))
Debug EscapeString("Test="+Chr(34)+"Hello"+Chr(34)+".") ; Affiche "Test=\"Hello\".";exemple de PureBasic


Système:
macOSMojave
Version 10.14
iMac (Retina 5K, 27-inch, 2017)


Dernière édition par Good07 le Mar 06/Nov/2018 17:58, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: J'ai raté quelque chose ?
MessagePosté: Lun 05/Nov/2018 18:02 
Hors ligne

Inscription: Jeu 07/Juin/2007 22:54
Messages: 176
Code:
A.s="JE"+Chr(34)+" SUIS"+Chr(34)+" UNE"+Chr(34)+" CHAINE"+Chr(34)+" ORDINAIRE"
Debug Len(A)
Debug Len(EscapeString(A,#PB_String_EscapeInternal))
ReplaceString(A,Chr(34),"\")
Debug Len(UnescapeString(A,#PB_String_EscapeInternal))
Debug EscapeString("Test="+Chr(34)+"Hello"+Chr(34)+".")


Un peut plus d'infos sur ce que tu essaie de faire aiderai à mieux t'aider / orienter.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: J'ai raté quelque chose ?
MessagePosté: Lun 05/Nov/2018 20:53 
Hors ligne

Inscription: Ven 23/Avr/2004 18:08
Messages: 296
Localisation: Hérault 34190 Laroque
Bonsoir boby,
Merci pour ta réponse.
En fait, Je ne fais rien de compliqué. il m'arrive souvent d'utiliser des textes qui proviennent de traitement de texte que j'introduit dans mon programme par un copier/collé et qui comportent en fin de chaine des caractères de retour à la ligne ou de retour chariot. J'avais pensé que ces deux expressions pouvaient me permettre d'éliminer ceux-ci mais je n'ai pas dû comprendre la finalité de l'expression qui malgré ton exemple me semble un peu nébuleuse dans sa fonction. Pourtant si l'on regarde l"aide de EscapeString(Chaine$ [, Mode]) donne bien un tableau qui englobe les caractères que je veux éliminer de ma chaine.
\a: bip Chr(7)
\b: retour arrière Chr(8)
\f: saut de page Chr(12)
\n: retour à la ligne Chr(10)
\r: retour chariot Chr(13)
\t: tabulation horizontale Chr(9)
\v: tabulation verticale Chr(11)
\": double quote Chr(34)
\\: antislash Chr(92)
Sinon mon petit exemple servait à mettre en évidence que la fonction PB ne modifiait en rien la chaine et que ces caractères de fin de ligne restaient en place et n'étaient pas éliminés ou ajouté à la chaine.
Avant j'utilisais len(A)-2 mais il fallait que je sache à l'avance si ces caractères étaient présent ou non...
Le but de cette fonction étant quand même selon l'aide de : Transforme une chaîne avec des séquences d'échappement en chaîne standard
ce qu'elle ne fait apparemment pas avec les caractères de fin de chaine et c'est gênant pour moi.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: J'ai raté quelque chose ?
MessagePosté: Lun 05/Nov/2018 22:16 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3209
Tu as peut-être loupé quelquechose :
Code:
b$ = ~"Escape\nMe !" ; string with escape sequence

Le signe "alternatif" (~) avant ta chaîne?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: J'ai raté quelque chose ?
MessagePosté: Lun 05/Nov/2018 22:45 
Hors ligne

Inscription: Jeu 07/Juin/2007 22:54
Messages: 176
Hum, ça demande une double oppération, mais si c'est ce que tu cherche à obtenir :
Code:
A.s="JE SUIS UNE CHAINE ORDINAIRE"
Debug Len(A)
A+Chr(10)+Chr(13)
Debug Len(A)
A = RTrim(A,Chr(13))
A = RTrim(A,Chr(10))
Debug Len(A)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: J'ai raté quelque chose ?
MessagePosté: Mar 06/Nov/2018 9:08 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1411
Les chaines d'échappement ne sont utilisées en PB (et autres langages) que pour la facilité de représentation lors de l'utilisation et l'affichage.
Mais pour que PB interprète les chaines d'échappement, il faut préfixer la chaine avec un Tilde (~).
Pour supprimer un caractères en trop, c'est Rtrim, Ltrim, et Trim (pour un/des espaces). ReplaceString() pour remplacer plusieurs d'un coup n'importe où.
#CRLF$ étant considéré comme deux caractères, on ne peut l'utiliser avec Rtrim.

En un mot, (Un)escapeString() ne changent que l'affichage et pas le contenu.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Résolu Re: J'ai raté quelque chose ?
MessagePosté: Mar 06/Nov/2018 9:40 
Hors ligne

Inscription: Ven 23/Avr/2004 18:08
Messages: 296
Localisation: Hérault 34190 Laroque
Bonjour à tous
Merci à tous pour vos réponses. Je n'avais effectivement pas compris l'utilisation de cette fonction.
En fait, j'utilise ces chaines de caractères pour mon programme de cryptographie et il faut que je nettoie les chaines avant de les utiliser. J'enlève donc tous les caractères accentués, les virgules, les points etc. Ca n'aurait pas de répercussion sur une cryptographie moderne, mais je traite surtout des cryptogrammes anciens (IXXe ou plus ancien) et ils n'utilisaient pas ce genre de caractères. J'ai donc réfléchi aux solutions que vous m'avez apporté et j'ai conçu un petit programme plus général pour mon cas.
Citation:
Procedure FormaterText()
a$=GetGadgetText(#Edgadget1)
For n=1 To Len(a$)
b$=Mid(a$,n,1)
Select b$
Case "é","è","ê","ë"
b$="e"
Case "ô","ö"
b$="o"
Case "ï","î"
b$="i"
Case ".",";",",","?","!",":","'","(",")","-","«","»",Chr(10),Chr(13),Chr(32),Chr(34)
b$=""
Case "à","â"
b$="a"
Case "ù","ü"
b$="u"
Case "ç"
b$="c"
EndSelect
texte$=texte$+b$
Next n
SetGadgetText(#Edgadget1,texte$)
EndProcedure

Il y aurait peut-être plus simple avec RegularExpression mais ça fonctionne très bien comme ça et je peux facilement rajouter des caractères à exclure de la chaine.
Merci à tous pour vos réponses.


Dernière édition par Good07 le Mar 06/Nov/2018 16:25, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: J'ai raté quelque chose ?
MessagePosté: Mar 06/Nov/2018 11:05 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1411
Une version avec en moins de lignes et donc assez facile à modifier.
Mais ne traite pas:
".",";",",","?","!",":","'","(",")","-","«","»",Chr(10),Chr(13),Chr(32),Chr(34)
:idea: :?: Ajouter un RemoveString() avant ou après ?

(Basé sur le principe de la commande unix 'tr'. Ex: tr '[àâäéèêëîïôöùûü]' '[aaaeeeeiioouuu]')
Auteur: je sais pas.
Code:
Procedure.s DisableAccent(Buffer.s)
    Protected i
    Protected CharToFind.s    = "àáâãäåçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝŸ"
    Protected CharToReplace.s = "aaaaaaceeeeiiiinooooouuuuyyAAAAAACEEEEIIIINOOOOOUUUUYY"
   
    For i = 1 To Len(CharToFind)
        ReplaceString(Buffer, Mid(CharToFind,i,1), Mid(CharToReplace,i,1), #PB_String_InPlace, 1)
    Next
    ProcedureReturn Buffer
EndProcedure

Debug DisableAccent("Débâcher , DÉBOÎTER")
Code:
Debacher , DEBOITER

On peut sans doutes faire plus vite en ASM ou à base de Peek et Poke.
(voir ce que ça donne sur un gros fichier)

:wink:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: J'ai raté quelque chose ?
MessagePosté: Mar 06/Nov/2018 11:23 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3209
Ah oui : le symbole ~ ne s'appelle pas "alternatif" mais s'appelle "tilde".
Merci Marc56 pour ce rappel. J'avais pas tildé...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: J'ai raté quelque chose ?
MessagePosté: Mar 06/Nov/2018 17:08 
Hors ligne

Inscription: Ven 23/Avr/2004 18:08
Messages: 296
Localisation: Hérault 34190 Laroque
Bonjour à tous et merci pour vos réponses.
Marc ta façon d'aborder le problème est intéressante, mais comme il est dit dans un autre post avec la vitesse des processeurs actuels, ce n'est pas quelques lignes de plus ou de moins qui vont faire une différence de vitesse. Je ne traite que des textes de 1000 caractères max et c'est instantané.
Mais il est vrai que j'aime voir comment on peut aborder le problème de façon différente et ça m'aide à comprendre la subtilité de la programmation.
Le problème est donc résolu mais je n'arrive pas à le marquer dans le titre du post.
Si une âme charitable peut le faire merci d'avance.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: J'ai raté quelque chose ?
MessagePosté: Mar 06/Nov/2018 17:42 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3209
Ah y'a une technique pour éditer le titre.
1) Tu te connectes
2) Tu vas sur ton premier message en tête de sujet
3) Tu cliques sur [Editer], en queue de premier message
4) Dans le formulaire à deux saisies (titre et message) tu modifies ton titre à ta guise

Bon, il y a des âmes charitables bien sûr, mais c'est au cas où ils n'aient pas le temps à l'avenir.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Résolu J'ai raté quelque chose ?
MessagePosté: Mar 06/Nov/2018 18:00 
Hors ligne

Inscription: Ven 23/Avr/2004 18:08
Messages: 296
Localisation: Hérault 34190 Laroque
Merci Olivier, c'est fait si je ne me suis pas trompé... :D


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 12 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye