Page 1 sur 2
[RESOLU]String$ ="(" impossible ?
Publié : ven. 27/déc./2019 10:29
par doudouvs
Bonjour,
C'est possible de rajouter "(" dans un String$ Sans espace non imprimable ?
Le "(" joue au grand magicien
Code : Tout sélectionner
String$ = "("
Debug String$
;ReplaceString(test$, "b", ")", #PB_String_InPlace, 1)
String$ = InsertString(String$, "(<<<< plus d'espace remplacer ", 1)
; h = ReplaceString(h,"","r(")
String$ = ReplaceString(String$,Chr(40),"Houdini")
Debug String$
Bonnes fêtes
Re: String$ ="(" impossible ?
Publié : ven. 27/déc./2019 12:38
par TazNormand
Salut Doudouvs,
Je ne comprends pas ce que tu veux dire ? perso en PB 5.62, j'obtiens ceci :
Code : Tout sélectionner
(
(<<<< plus d'espace remplacer (
Houdini<<<< plus d'espace remplacer Houdini
J'ai juste rajouté un debug() après la ligne InsertString() histoire de voir ce le résultat
Pour moi le comportement est celui attendu
N'ayant pas la 5.71, je ne peux tester, je vais voir pour l'installer et modifier mon commentaire en conséquence.
EDIT :
Je viens d'installer la 5.71 x64 sous Windows 7 x64, et le comportement est le même
Re: String$ ="(" impossible ?
Publié : ven. 27/déc./2019 13:05
par doudouvs
En faite je me suis planter avec un table pourrie
Le : Chr(40) c'est bien (
Si je fait String$ = Chr(37) et que je l'envoi a l'imprimante ca marche normalement
Si je fait une boucle pour récupéré tout le numéro Ascii puis String$ = Chr(k) en sortie de debug j'ai bien ma chaine
Code : Tout sélectionner
Chr(5C)+Chr(0)+Chr(72)+Chr(0)+Chr(5C)+Chr(0)+Chr(6E)+Chr(0)+Chr(45)+Chr(0)+Chr(6D)+Chr(0)+Chr(70)+Chr(0)+Chr(6C)+Chr(0)+Chr(61)+Chr(0)+Chr(63)+Chr(0)+Chr(65)+Chr(0)+Chr(6D)
Par contre il m'imprime le code
Code : Tout sélectionner
Chr (5C)+Chr (0)+Chr (72)+Chr (0)+Chr (5C)+Chr (0)+Chr (6E)+Chr (0)+Chr (45)+Chr (0)+Chr (6D)+Chr (0)+Chr (70)+Chr (0)+Chr (6C)+Chr (0)+Chr (61)+Chr (0)+Chr (63)+Chr (0)+Chr (65)
Il place un espace entre Chr et (
J'ai fait un...For, histoire d'avoir la bonne table j'ai passer une bonne partie des codes Ascii pour voir si j'arrive a viré l'espace rien y fait
Je cherche je cherche comme une âme perdu
Re: String$ ="(" impossible ?
Publié : ven. 27/déc./2019 14:09
par doudouvs
Pour plus de compréhension voilà mon bout de code
Je mis prend surement comme un quiche
Structure CHAR
c.c
EndStructure
a.s = "totoot et tatata"
l = Len(a)
*p_c.CHAR = @a
c_size = StringByteLength(" ")
*p_b.BYTE = @a
h.s = ""
For n = 1 To (l+1)*c_size
;h = h + Hex(*p_b\b)
h = h + "Chr("+Hex(*p_b\b)+")"
; c'est ici que je veux rajouter h dans Chr(h)
*p_b = *p_b+1
Next n
Debug h
; Dans le debug c'est bien pas quand j'imprime il rajoute un espace entre Chr et () exemple : Chr"espace"(47)
Re: String$ ="(" impossible ?
Publié : ven. 27/déc./2019 14:53
par doudouvs
Raaaaaaaaaaaa c'est bon
Code : Tout sélectionner
a.s = "totoot et tatata"
If CreateRegularExpression(0, ".")
Dim Resultat$(0)
Nb = ExtractRegularExpression(0, a, Resultat$())
For k = 0 To Nb-1
For n = 1 To 255
st.s = Chr(n)
;Debug st.s
If st = Resultat$(k)
out$ = out$ + Chr(n)
EndIf
Next
;Debug Resultat$(k)
Next
Else
Debug RegularExpressionError()
EndIf
Debug out$
Re: [RESOLU]String$ ="(" impossible ?
Publié : ven. 27/déc./2019 18:16
par Ollivier
Ceci était un exemple de plaisir solitaire. La parenthèse a pu être fermée avec moins de difficultés...
HEIN ??????
Publié : ven. 27/déc./2019 18:37
par Naheulf
J'ai strictement
rien compris à ce que tu cherches à faire...
1) Dans ton premier message tu nous parles de créer une chaîne de caractère sans "espace non imprimable". Soit littéralement une espace qui n'apparaît pas lors de l'impression. Mais, dans ton second message, tu nous parle d'une espace présente uniquement à l'impression.
2) Tu évoque un problème avec les parenthèses ouvrantes mais dans ton dernier message tu nous dit que "c'est bon" avec un code d'exemple qui n'utilise plus ce caractère.
3) Tu parles d'impression mais je ne vois aucune fonction d'impression dans tes codes.
4) Ton dernier exemple revient
exactement à faire (mais en
beaucoup plus lourd):
...ce qui semble n'avoir aucun lien avec le sujet de départ.
J'espère que tu pourra mieux nous expliquer ce que tu
cherches à faire.
PS1 : Pour ton premier exemple j'obtiens la même chose que TazNormand en passant par Ubuntu 18.04 x64.
PS2 : Dans ton deuxième exemple (messages 2 et 3), les Chr(0) tous les deux caractères sont dus à un "+1" qui ne devrait pas être écrit comme ça.
PS3 : Je te conseille de te renseigner sur l'instruction "sizeof" et la structure prédéfinie "CHARACTER"
Re: [RESOLU]String$ ="(" impossible ?
Publié : ven. 27/déc./2019 23:03
par doudouvs
4) Ton dernier exemple revient
exactement à faire (mais en
beaucoup plus lourd):
...ce qui semble n'avoir aucun lien avec le sujet de départ.
##########################################
Non c'est pas la même chose avec une imprimante ESC/POS il faut lui envoyer les Chr()
Dans le premier exemple, dans le debug c’était ok mais l'imprimante imprimer Chr (67) ect.... pourquoi il ajouter les espaces mystère.
Dans le denier exemple; le debug afficher bien les caractères et l'imprimante imprimer correctement, on lui envoi Chr(67) elle imprime A
Si je fait
Elle imprime pas "totoot et tatata" elle imprime les Chr()
La bonne chose a faire pour imprimer "totoot et tatata" c'est ca
Code : Tout sélectionner
a.s = "totoot et tatata"
If CreateRegularExpression(0, ".")
Dim Resultat$(0)
Nb = ExtractRegularExpression(0, a, Resultat$())
For k = 0 To Nb-1
For n = 1 To 255
st.s = Chr(n)
;Debug st.s
If st = Resultat$(k)
out$ = out$ + Chr(n)
EndIf
Next
;Debug Resultat$(k)
Next
Else
Debug RegularExpressionError()
EndIf
Debug out$
Le code pour imprimer
Code : Tout sélectionner
printer$ = "-d Bar "
outprint = RunProgram("lp",printer$,"",#PB_Program_Open|#PB_Program_Write)
FinDuTicket$ = Chr(10)+Chr(10)+Chr(10)+Chr(10)+Chr(10)+Chr(10)+Chr(10)+Chr(10)+Chr(10)+Chr(10)
texte$ = out$+FinDuTicket$
WriteProgramString(outprint,texte$)
CloseProgram(outprint)
Re: [RESOLU]String$ ="(" impossible ?
Publié : sam. 28/déc./2019 0:04
par case
au final ton code ca reviens pas a faire ca ?
Code : Tout sélectionner
a.s = "totoot et tatata"
For k=1 To Len(a)
out$=out$+Chr(Asc(Mid(a,k,1)))
Next
Debug out$
Re: [RESOLU]String$ ="(" impossible ?
Publié : sam. 28/déc./2019 1:03
par doudouvs
case a écrit :au final ton code ca reviens pas a faire ca ?
Code : Tout sélectionner
a.s = "totoot et tatata"
For k=1 To Len(a)
out$=out$+Chr(Asc(Mid(a,k,1)))
Next
Debug out$
Effectivement là aussi ca marche je viens de faire un test
Merci Case ca aère le code et ma tête
Re: [RESOLU]String$ ="(" impossible ?
Publié : sam. 28/déc./2019 11:15
par Zorro

besoin d'une tres grosse aeration alors
et pourquoi ça, ça ne marcherai pas ???
Code : Tout sélectionner
a.s = "totoot et tatata"
printer$ = "-d Bar "
outprint = RunProgram("lp",printer$,"",#PB_Program_Open|#PB_Program_Write)
FinDuTicket$ = Chr(10)+Chr(10)+Chr(10)+Chr(10)+Chr(10)+Chr(10)+Chr(10)+Chr(10)+Chr(10)+Chr(10)
texte$ = a.s+FinDuTicket$
WriteProgramString(outprint,texte$)
CloseProgram(outprint)
parcequ'au final ce code
Code : Tout sélectionner
a.s = "totoot et tatata"
For k=1 To Len(a)
out$=out$+Chr(Asc(Mid(a,k,1)))
Next
Debug out$
reviens a faire
non ??
Re: [RESOLU]String$ ="(" impossible ?
Publié : sam. 28/déc./2019 11:39
par Marc56
Et aussi pourquoi
Chr( Asc( ) ) ? (c'est une boucle)
Code : Tout sélectionner
Debug "a" ; a
Debug Chr(Asc("a")) ; a
a.s = "totoot et tatata"
For k=1 To Len(a)
out$=out$+Chr(Asc(Mid(a,k,1)))
Next
Debug out$
; idem
For k=1 To Len(a)
out2$ + Mid(a,k,1)
Next
Debug out2$
PS. Plutôt que de procéder par tâtonnement, pourquoi ne pas lire la doc d'ESC/POS ? (il existe même un pilote Windows)
https://docs.microsoft.com/fr-fr/window ... formatting
Le pilotage d'imprimante par code d’échappement se fait en général par un code Esc (ascii 27) suivi du code de contrôle puis du reste à envoyer.

Les fichiers au format ESC/POS sont des fichiers binaires et pas de simples fichiers texte.
Précises le modèle d'imprimante si tu veux plus d'aide
(Comme tu utilises
lp (
Line Printer) pour imprimer, je suppose que tu es sous Linux.)

Re: [RESOLU]String$ ="(" impossible ?
Publié : sam. 28/déc./2019 18:42
par doudouvs
Merci mais pour l'instant cela marche bien.
Pour l'éclairage vos lanternes :
C'est un logiciel de caisse héberger sur un serveur distant, je récupère les tickets a travers le navigateur en ajax sur un port local. Ensuite je fait un traitement local avec un prog en PB.
Puis il distribue les tickets au bon endroit (Bar, Cuisine, Pizza, ect...)
Si un client demande le règlement, on lui affiche le ticket (provisoire) sur l'écran client.
Si le client fait le payement, on lui imprime et affiche X secondes le ticket (final) sur l'écran client.
Le souci c'est que le serveur qui m'envoi le ticket en html et vraiment pourrie, je n'ai pas envie de le modifier pour l'instant le soft distant, je suis entrain de finir un module spécialement pour lui, dans quelques mois...
C'est vraiment du provisoire quand, le module sera fini la gestion du ticket directement sur le serveur, le soft PB sera uniquement là pour faire l'affichage client et la distribution des tickets aux différents endroit.
Là j'ai presque fini il me reste juste la mise en pages du ticket client
@Marc56 oui les caisses tactiles sont sous Linux.
Je pense vous faire une petite vidéo de démo, faut que je regarde ce qui traîne dans ma cave comme caméra.
Re: [RESOLU]String$ ="(" impossible ?
Publié : sam. 28/déc./2019 23:59
par case
Marc56 a écrit :Et aussi pourquoi
Chr( Asc( ) ) ? (c'est une boucle)
Code : Tout sélectionner
Debug "a" ; a
Debug Chr(Asc("a")) ; a
a.s = "totoot et tatata"
For k=1 To Len(a)
out$=out$+Chr(Asc(Mid(a,k,1)))
Next
Debug out$
; idem
For k=1 To Len(a)
out2$ + Mid(a,k,1)
Next
Debug out2$
PS. Plutôt que de procéder par tâtonnement, pourquoi ne pas lire la doc d'ESC/POS ? (il existe même un pilote Windows)
https://docs.microsoft.com/fr-fr/window ... formatting
Le pilotage d'imprimante par code d’échappement se fait en général par un code Esc (ascii 27) suivi du code de contrôle puis du reste à envoyer.

Les fichiers au format ESC/POS sont des fichiers binaires et pas de simples fichiers texte.
Précises le modèle d'imprimante si tu veux plus d'aide
(Comme tu utilises
lp (
Line Printer) pour imprimer, je suppose que tu es sous Linux.)

j'ai mis out$=out$+Chr(Asc(Mid(a,k,1))) car je me posais la question du cas ou le string serait utf8 par exemple avec des caractères non ASCII pour renvoyer un caractère ASCII.
car si pour moi il est nécessaire de convertir une string en string c'est qu'il y a déjà un problème de format.
car au final convertir "tata toto" en "tata toto" en passant par un mid() ou tout autre moulinette c'est deja wtf. car comme l'indique zorro normalement balancer la chaine d'origine devrait fonctionner.
Re: [RESOLU]String$ ="(" impossible ?
Publié : dim. 29/déc./2019 8:19
par doudouvs
Effectivement le string c'est de l'utf8, le format d'arriver comme dit dans mon précédent message je ne retouche pas pour l'instant.
J'ai la Doc ESC/POS et comme il y a déjà un Parser coter PHP je ne vais pas le refaire coter PB enfin quoi que, on verra....
PS Le forum n'envoi plus de mail, alors que la case "M’avertir lorsqu’une réponse est postée." et bien cocher