[RESOLU]String$ ="(" impossible ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

[RESOLU]String$ ="(" impossible ?

Message 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
Dernière modification par doudouvs le ven. 27/déc./2019 14:54, modifié 1 fois.
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: String$ ="(" impossible ?

Message 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
Image
Image
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: String$ ="(" impossible ?

Message 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

Code : Tout sélectionner

For k = 0 To 255 
  Debug k
  Debug Chr(k)
  Next

Je cherche je cherche comme une âme perdu
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: String$ ="(" impossible ?

Message 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)
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: String$ ="(" impossible ?

Message 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$

GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: [RESOLU]String$ ="(" impossible ?

Message par Ollivier »

Ceci était un exemple de plaisir solitaire. La parenthèse a pu être fermée avec moins de difficultés...
Avatar de l’utilisateur
Naheulf
Messages : 193
Inscription : dim. 10/mars/2013 22:22
Localisation : France

HEIN ??????

Message 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):

Code : Tout sélectionner

a.s = "totoot et tatata"
out$ + a
Debug out$
...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"
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: [RESOLU]String$ ="(" impossible ?

Message par doudouvs »

4) Ton dernier exemple revient exactement à faire (mais en beaucoup plus lourd):

Code : Tout sélectionner

a.s = "totoot et tatata"
out$ + a
Debug out$
...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

Code : Tout sélectionner

a.s = "totoot et tatata"
out$ + a
Debug out$
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)
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: [RESOLU]String$ ="(" impossible ?

Message 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$
ImageImage
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: [RESOLU]String$ ="(" impossible ?

Message 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
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: [RESOLU]String$ ="(" impossible ?

Message par Zorro »

:lol: :lol: :lol: besoin d'une tres grosse aeration alors :lol: :lol: :lol:



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

Code : Tout sélectionner

 out$=a.s 
non ??
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: [RESOLU]String$ ="(" impossible ?

Message 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.)

:wink:
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: [RESOLU]String$ ="(" impossible ?

Message 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.
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: [RESOLU]String$ ="(" impossible ?

Message 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.)

:wink:
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.
ImageImage
doudouvs
Messages : 244
Inscription : jeu. 07/mars/2013 19:02
Localisation : France Alsace / Espagne Girona

Re: [RESOLU]String$ ="(" impossible ?

Message 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
GCC 7.4.0 / PureBasic 5.71 / Ubuntu 18.04.3 LTS
Répondre