PureBasic

Forums PureBasic
Nous sommes le Ven 15/Nov/2019 14:37

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 19 messages ]  Aller à la page 1, 2  Suivante
Auteur Message
 Sujet du message: Expression régulière date
MessagePosté: Mar 09/Avr/2019 21:31 
Hors ligne

Inscription: Dim 24/Juin/2018 1:20
Messages: 95
Bonsoirs à tous

je m'adresse aux virtuose des "Expression régulière";

voilà mon problème, sur un bloc texte je souhaiterais repérer toute les dates
le souci c'est que je ne pige rien à ce langage :oops:

Code:

OpenWindow(0,0,0,200,200,"",#PB_Window_ScreenCentered)
EditorGadget(1,0,0,200,180)
;StringGadget(1,0,0,200,180,"")
ButtonGadget(2,0,180,30,20,"cap")

If CreateRegularExpression(10,"(0?[1-9]/[12][0-9]/3[01])") ;(0?[1-9]/[12][0-9]/3[01]) ;(\d{4})-(\d{1,2})-(\d{1,2})
   Debug "RegEx ok!"
Else
   Debug "RegEx erreur!"
EndIf

Dim Resultat$(0)

Repeat
   Event = WaitWindowEvent()
   WindowID = EventWindow()
   GadgetID = EventGadget()
   EventType = EventType()
   
   Select GadgetID
      Case 2
         txt$=GetGadgetText(1)

         If txt$
            Nb = ExtractRegularExpression(10, txt$, Resultat$())
               
            For k = 0 To Nb-1
               Debug Resultat$(k)
            Next
         EndIf
   EndSelect
ForEver


j'ai essayé de chopper sur le net quelques exemples de regex mais ils ne sont pas du tout valide((
éclairez moi svp


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Expression régulière date
MessagePosté: Mar 09/Avr/2019 21:40 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3521
Est-ce que tu es contraint d'utiliser les expressions régulières ?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Expression régulière date
MessagePosté: Mar 09/Avr/2019 22:04 
Hors ligne

Inscription: Dim 24/Juin/2018 1:20
Messages: 95
@Ollivier franchement oui ou bien alors je ne sais pas si on peut faire autrement!
voici un exemple de bloc texte copier à partir d'un logiciel au travail

Code:
07/04/19 P F5-121-04                   0       5       0       5       0  ((
((                                                                            ((
((  12/04/19 P F6-070-04                   0      30       0      30       0  ((
((           P F6-092-04                   0      30       0      30       0  ((
((                                   ---------------------------------------  ((
((       TOTAL DATE 12/04/19               0      60       0      60       0  ((
((                                                                            ((
((  13/04/19 P F4-110-04                   0      36       0      36       0


à terme, je souhaiterais pouvoir capturer le doublet (date - adresse - quantité) "07/04/19_F5-121-04_5"
représenté sous cette ligne d'exemple "07/04/19 P F5-121-04 0 5 0 5 0 "


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Expression régulière date
MessagePosté: Mar 09/Avr/2019 22:24 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 16/Oct/2015 18:22
Messages: 315
Localisation: France
Bonsoir,

@Ekim, peux-tu souligner dans un exemple les parties que tu cherches a récupérer pour que l'on puisse mieux cerner ton besoin. Merci.

CAGE

_________________
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 5.70 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Expression régulière date
MessagePosté: Mer 10/Avr/2019 6:06 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1635
Citation:
à terme, je souhaiterais pouvoir capturer le doublet (date - adresse - quantité) "07/04/19_F5-121-04_5"
représenté sous cette ligne d'exemple "07/04/19 P F5-121-04 0 5 0 5 0 "

Si ta date a toujours la forme JJ/MM/AA, la regex est facile:
Code:
\b\d{2}/\d{2}/\d{2}.+\b
On peut faire plus élaboré pour vérifier jour (1 à 31, mois 1 à 12, année inférieurs à année en cours)
To code capture plusieurs fois le contenu de l’éditeur. Il faut penser à vider.
(Eviter d'utiliser des ID numériques pour les gadgets)
Code:
EnableExplicit

; Pour test
Define A$ = "07/04/19 P F5-121-04                   0       5       0       5       0  (("     + #CRLF$ +
            "((                                                                            ((" + #CRLF$ +
            "((  12/04/19 P F6-070-04                   0      30       0      30       0  ((" + #CRLF$ +
            "((           P F6-092-04                   0      30       0      30       0  ((" + #CRLF$ +
            "((                                   ---------------------------------------  ((" + #CRLF$ +
            "((       TOTAL DATE 12/04/19               0      60       0      60       0  ((" + #CRLF$ +
            "((                                                                            ((" + #CRLF$ +
            "((  13/04/19 P F4-110-04                   0      36       0      36       0"


Enumeration
    #Win
    #Edt
    #Btn
    #Regex
EndEnumeration

OpenWindow(#Win, 0, 0, 200, 200, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
EditorGadget(#Edt, 0, 0, 200, 180)
ButtonGadget(#Btn, 0, 180, 30, 20, "cap")

If CreateRegularExpression(#Regex, "\b\d{2}/\d{2}/\d{2}.+\b")
    Debug "RegEx ok!"
    Debug "Cliquez sur Cap"
    Debug ""
Else
    Debug "RegEx erreur!"
EndIf

Dim Resultat$(0)

; Test
SetGadgetText(#Edt, A$)

Repeat
    Define Event        = WaitWindowEvent()
    ; Define WindowID     = EventWindow()
    Define GadgetID     = EventGadget()
    ; Define EventType    = EventType()
   
    Select GadgetID
        Case #Btn
            Define txt$ = GetGadgetText(1)
           
            If txt$
                Define Nb = ExtractRegularExpression(#Regex, txt$, Resultat$())
               
                Define k
                For k = 0 To Nb - 1
                    Debug Resultat$(k)
                Next
                ; Vider le gadget après usage
                ClearGadgetItems(#Edt)
            EndIf
    EndSelect
Until Event = #PB_Event_CloseWindow     

End

:wink:

_________________
Windows 10 Famille x64 + Linux (Slackware, Debian sur Oracle VirtualBox 6.0), Raspberry Pi


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Expression régulière date
MessagePosté: Mer 10/Avr/2019 14:04 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3521
On peut carrément faire autrement et bien plus performant que les expressions régulières. Il faut juste savoir exactement ce que tu as besoin : tu as déjà commencé par scinder date, adresse et quantités, ce qui est une bonne étape.

Les dates, il y a un problème : le 10 Avril 2019 s'écrit 10/04/2019 ou bien 04/10/2019 selon les conventions. Soit c'est le jour AVANT le mois, soit c'est le jour APRES le mois.

Dans ton cas, est-ce que tu as la certitude que la convention est soit l'une ou, exclusivement, soit l'autre, et surtout jamais un mélange possible des deux conventions ?

Si jamais il n'y a pas de mélange possible, il y a une solution programmable.
S'il y a mélange possible, il n'y a pas de solution, c'est-à-dire qu'il sera impossible de faire un automate complètement autonome qui ne fera jamais d'erreur.

Dans ton cas, il n'y a qu'une convention ?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Expression régulière date
MessagePosté: Mer 10/Avr/2019 14:39 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1635
:idea: Si le bloc de texte est formaté d'une manière constante (ce qui est souvent le cas de rapport) alors un simple FindString() + StringField() suffit. (ou Mid() et Trim() si pas de séparateurs standards)

Juste pour le fun, voici une version regex :)
Si ta ligne à utiliser est la première (celle dont la date est contre la marge) et que la quantité est le premier 5 de la même ligne.
Code:
EnableExplicit

Define A$ = "07/04/19 P F5-121-04                   0       5       0       5       0  (("     + #CRLF$ +
            "((                                                                            ((" + #CRLF$ +
            "((  12/04/19 P F6-070-04                   0      30       0      30       0  ((" + #CRLF$ +
            "((           P F6-092-04                   0      30       0      30       0  ((" + #CRLF$ +
            "((                                   ---------------------------------------  ((" + #CRLF$ +
            "((       TOTAL DATE 12/04/19               0      60       0      60       0  ((" + #CRLF$ +
            "((                                                                            ((" + #CRLF$ +
            "((  13/04/19 P F4-110-04                   0      36       0      36       0"


Enumeration
    #Win
    #Edt
    #Btn
    #Regex
EndEnumeration

OpenWindow(#Win, 0, 0, 200, 200, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
EditorGadget(#Edt, 0, 0, 200, 180)
ButtonGadget(#Btn, 0, 180, 30, 20, "cap")

If CreateRegularExpression(#Regex, "^(\d{2}/\d{2}/\d{2})\s+(?:.)\s+([\w\d-]+)\s+(?:.)\s+(\d)")
    Debug "RegEx ok!"
    Debug "Cliquez sur Cap"
    Debug ""
Else
    Debug "RegEx erreur!"
EndIf

Dim Resultat$(0)

; Test
SetGadgetText(#Edt, A$)

Repeat
    Define Event        = WaitWindowEvent()
    Define GadgetID     = EventGadget()
   
    Select GadgetID
        Case #Btn
            Define txt$ = GetGadgetText(1)
           
            If txt$
                If ExamineRegularExpression(#Regex, txt$)
                    While NextRegularExpressionMatch(#Regex)
                    Define Date$        = RegularExpressionGroup(#Regex, 1)
                    Define Adresse$     = RegularExpressionGroup(#Regex, 2)
                    Define Quantite$    = RegularExpressionGroup(#Regex, 3)
                    Debug "Date     : " + Date$
                    Debug "Adresse  : " + Adresse$
                    Debug "Quantité : " + Val(Quantite$)
                    Debug ""
                    Debug "Code     : " + Date$ + "_" + Adresse$ + "_" + Quantite$
                    Wend
                 EndIf   
                ; Vider le gadget après usage
                ClearGadgetItems(#Edt)
            EndIf
    EndSelect
Until Event = #PB_Event_CloseWindow     

End
Code:
RegEx ok!
Cliquez sur Cap

Date     : 07/04/19
Adresse  : F5-121-04
Quantité : 5

Code     : 07/04/19_F5-121-04_5

:wink:

_________________
Windows 10 Famille x64 + Linux (Slackware, Debian sur Oracle VirtualBox 6.0), Raspberry Pi


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Expression régulière date
MessagePosté: Mer 10/Avr/2019 20:19 
Hors ligne

Inscription: Dim 24/Juin/2018 1:20
Messages: 95
Bonsoirs à tous les champions :D

@Cage j'avais précisé mais il est vrai que j'aurais dû écrire "triplet" au lieu de "Doublet" car il y a 3 infos qui m’intéresses Date_Adresse_Quantité

@Tous Oui j'ai effectivement oublier de préciser que la zone Quantité doit comporter des chiffres non nuls et une Date peut comporter plusieurs Adresses ainsi que leur Quantité

voici une copie d'écran du logiciel pro pas plus tard qu'aujourd'hui
Code:
28/04/19 P 34-058-04                   0       4       0       4       0  ((
((           P 34-074-05                   0      16       0      16       0  ((
((           P 34-082-05                   0      16       0      16       0  ((
((           P 34-088-05                   0      16       0      16       0  ((
((           P 35-085-05                   0      20       0      20       0  ((
((                                   ---------------------------------------  ((
((       TOTAL DATE 28/04/19               0      72       0      72       0  ((
((                                                                            ((
((  30/04/19 P 34-048-01                   0      16       0      16       0  ((
((           P 34-072-01                   0      16       0      16       0  ((
((           P 35-091-02                   0      20       0      20       0


Note: "TOTAL DATE 28/04/19 0 72 0 72 0"
à ne pas tenir compte car je n'en ai pas besoin

@Marc56 Oui la Date est toujours sous cette forme "jj/mm/aa" et
inutile d'élaborer ta RegEx car elle est amplement suffisante, pour
répondre à ta 2eme questions, effectivement le texte est toujours
formaté de cette façon, voici quelques copie différentes:

Code:
29/04/19 P 45-141-05                   0      11       0      11       0  ((
((                                                                            ((
((  30/04/19 P F1-075-03                   0      24       0      24       0  ((
((           P F1-075-04                   0      16       0      16       0  ((
((           P F1-077-02                   0      16       0      16       0  ((
((                                   ---------------------------------------  ((
((       TOTAL DATE 30/04/19               0      56       0      56       0


ou encore

Code:
20/04/19 P 37-035-02                   0      32       0      32       0  ((
((                                                                            ((
((  30/04/19 P 36-042-05                   0      42       0      42       0  ((
((           P 36-090-03                   0      72       0      72       0


les Adresses et Quantités ne possédants pas de Dates c'est tout simplement parce qu'ils
dépendent de la dernière Date

@Marc56 ton 1er code est intéressant mais il ne récupère que les dernières Date, mais sinon super l'idée
et le 2eme récupère la 1ere ligne, le style est très intéressant, grand bravo :D

@Ollivier pour mon cas la convention ne rentre pas en compte donc reste à 10/04/19 et c'est une certitude :wink:


@Tous en tout cas merci pour votre aides, au taff, je me sers d'un vieux logiciel pour gérer des stocks et j’essaie de m'épargner le couplet "papier/stylos" car je perd un temps fou
à tout noter/trié, par la suite, je ferais imprimer toutes ces données recueillit en condensé sur papier, gain de temps >2h minimum et cela me permettrais d'avoir enfin une pause déjeuné de 1h, vous vous en rendez compte? :lol:


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Expression régulière date
MessagePosté: Jeu 11/Avr/2019 0:22 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 16/Oct/2015 18:22
Messages: 315
Localisation: France
Bonsoir,
Pas eu le temps de regarder avant, aussi un code vite fait.
La sortie semble parfaitement formatée, aussi, j'ai fait au plus simple.
Code:
EnableExplicit

Define A$, L$, V, n, count, line, line$
Define addr$, date$, nbre$

; Pour test
A$ = "07/04/19 P F5-121-04                   0       5       0       5       0  (("     + #CRLF$ +
     "((                                                                            ((" + #CRLF$ +
     "((  12/04/19 P F6-070-04                   0      30       0      30       0  ((" + #CRLF$ +
     "((           P F6-092-04                   0      30       0      30       0  ((" + #CRLF$ +
     "((                                   ---------------------------------------  ((" + #CRLF$ +
     "((       TOTAL DATE 12/04/19               0      60       0      60       0  ((" + #CRLF$ +
     "((                                                                            ((" + #CRLF$ +
     "((  13/04/19 P F4-110-04                   0      36       0      36       0"
 
A$ + #CRLF$ ; on s'assure que la dernière ligne soit prise en compte

count = CountString(A$, #CRLF$) ;: Debug "count="+count
 
For line = 1 To count
  line$ = StringField(A$, line, #CRLF$)
  line$ = ReplaceString(line$, "((", "")
  line$ = Trim(line$)
  If line$ = "" : Continue : EndIf
  line$ = ReplaceString(line$, Chr(9), " ")
  For n = 1 To Len(line$)
    line$ = ReplaceString(line$, "  ", " ")
  Next
  If line$ = "" : Continue : EndIf
  Select UCase(Left(line$, 5))
   Case "TOTAL"
   Case "-----"
   Default
    L$ = Left(line$, 1)
    V  = Asc(L$)
    Select V
      Case 48 To 51 ; 0,1,2,3 Jours de (0)1 a (3)1
        date$ = StringField(line$, 1, " ")
        addr$ = StringField(line$, 2, " ") + " " + StringField(line$, 3, " ")
        nbre$ = StringField(line$, 5, " ")
        : Debug date$ + " ---> " + addr$ + " ---> " + nbre$
        : Debug ""
      Case 65 To 90 ; de A a Z on cherche P dans l'exemple
        addr$ = StringField(line$, 1, " ") + " " + StringField(line$, 2, " ")
        nbre$ = StringField(line$, 4, " ")
        : Debug date$ + " ---> " + addr$ + " ---> " + nbre$
        : Debug ""
    EndSelect
  EndSelect
Next
Ce qui donne en sortie:
Citation:
07/04/19 ---> P F5-121-04 ---> 5

12/04/19 ---> P F6-070-04 ---> 30

12/04/19 ---> P F6-092-04 ---> 30

13/04/19 ---> P F4-110-04 ---> 36
Bonne nuit a tous.
CAGE

_________________
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 5.70 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Expression régulière date
MessagePosté: Jeu 11/Avr/2019 9:10 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1635
Juste pour le fun :P version regex avec groupe nommé
À adapter notamment pour le code adresse (j'ai supposé que c'était toujours P espace puis un code)

Code:
EnableExplicit

Define A$ = "07/04/19 P F5-121-04                   0       5       0       5       0  (("     + #CRLF$ +
            "((                                                                            ((" + #CRLF$ +
            "((  12/04/19 P F6-070-04                   0      30       0      30       0  ((" + #CRLF$ +
            "((           P F6-092-04                   0      30       0      30       0  ((" + #CRLF$ +
            "((                                   ---------------------------------------  ((" + #CRLF$ +
            "((       TOTAL DATE 12/04/19               0      60       0      60       0  ((" + #CRLF$ +
            "((                                                                            ((" + #CRLF$ +
            "((  13/04/19 P F4-110-04                   0      36       0      36       0"


Enumeration
    #Regex
EndEnumeration

; Regex par goupe nommé
; https://www.purebasic.com/french/documentation/regularexpression/regularexpressionnamedgroup.html
; date      : JJ/MM/AA si elle existe
; adresse   : P Lettres + Chiffres + '-'
; quantité  : deuxième groupe de chiffres


If CreateRegularExpression(#Regex, "(?<date>(\d{2}/\d{2}/\d{2})?) "     +
                                   "(?<adresse>P [\w\d-]+)\s+\d+\s+"    +
                                   "(?<quantite>\d+)")
Else
    Debug "RegEx erreur!"
    End
EndIf

Define Date$     
Define Date_Prec$
Define Adresse$ 
Define Quantite$

If ExamineRegularExpression(#Regex, A$)
    While NextRegularExpressionMatch(#Regex)
       
        ; Conserver la date précédente
        Date_Prec$  = Date$
       
        Date$       = RegularExpressionNamedGroup(#Regex, "date")
        Adresse$    = RegularExpressionNamedGroup(#Regex, "adresse")
        Quantite$   = RegularExpressionNamedGroup(#Regex, "quantite")
       
        ; Donner la date précédente s'il n'y en a aucune
        If Date$ = "" : Date$ = Date_Prec$ : EndIf

        Debug Date$ + " ---> " + Adresse$ + " --- > " + Quantite$
       
    Wend
EndIf   

End
Code:
07/04/19 ---> P F5-121-04 --- > 5
12/04/19 ---> P F6-070-04 --- > 30
12/04/19 ---> P F6-092-04 --- > 30
13/04/19 ---> P F4-110-04 --- > 36
:wink:

_________________
Windows 10 Famille x64 + Linux (Slackware, Debian sur Oracle VirtualBox 6.0), Raspberry Pi


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Expression régulière date
MessagePosté: Jeu 11/Avr/2019 21:18 
Hors ligne

Inscription: Dim 24/Juin/2018 1:20
Messages: 95
Alors là @Cage et @Marc56 vous êtes des pros c'est certain :D

deux styles différent pour un même résultat, c'est super cool :D
je me dépêche de les adapter :wink:

j'aurais enfin une vrai pause comme tout le monde :lol:

un grand merci à vous tous)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Expression régulière date
MessagePosté: Jeu 11/Avr/2019 21:36 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 16/Oct/2015 18:22
Messages: 315
Localisation: France
Bonsoir,

La solution de Marc56 fait plus pro, mais peut-être plus difficile a comprendre pour qui ne connait les expressions régulières.
Quoi qu'il en soit, heureux qu'on ait pu te rendre service.
Repose toi bien.

CAGE

_________________
■ Win10 64-bit (Intel Celeron CPU N2920 @ 1.86GHz, 4,0GB RAM, Intel HD Graphics) & PB 5.70 LTS
■ Vivre et laisser vivre.
■ PureBasic pour le fun
■ Mes sites: http://pbcage.free.fr - http://yh.toolbox.free.fr


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Expression régulière date
MessagePosté: Ven 12/Avr/2019 13:22 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2106
Version Old School ;)

Code:
;***********************************************
;Titre  :*extraction_fiche_pro
;Auteur  : Dobro
;Date  :12/04/2019
;Heure  :14:20:09
;Version Purebasic :  PureBasic 5.70 LTS (Windows - x64)
;Version de l'editeur :EPB V2.68
; Libairies necessaire : Aucune
;***********************************************

A$ = "07/04/19 P F5-121-04                   0       5       0       5       0  (("     + #CRLF$ +
"((                                                                            ((" + #CRLF$ +
"((  12/04/19 P F6-070-04                   0      30       0      30       0  ((" + #CRLF$ +
"((           P F6-092-04                   0      30       0      30       0  ((" + #CRLF$ +
"((                                   ---------------------------------------  ((" + #CRLF$ +
"((       TOTAL DATE 12/04/19               0      60       0      60       0  ((" + #CRLF$ +
"((                                                                            ((" + #CRLF$ +
"((  13/04/19 P F4-110-04                   0      36       0      36       0"
;

num_line=CountString(a$,chr(13))

For L=0 to num_line
      Ligne.s = StringField(A$, L+1, #CRLF$)
      Ligne.s=RemoveString(Ligne.s,"((")
      Ligne.s=replaceString(Ligne.s,chr(9),chr(32))
      Ligne.s=Trim(Ligne.s): Ligne.s=RemoveString(Ligne.s,"---------------------------------------")
      If Mid(Ligne.s,1,1)<>"T"  and  len(Ligne.s)>0; seulement les lignes  ne commençant pas par T.otal         
            If findString(left(Ligne.s,8),"/")=0
                  Dates.s=mem$               
            Adresse.s=trim(mid(Ligne.s,1,12))   
            Else
                  Dates.s=trim(left(Ligne.s,8))
                  mem$=Dates.s               
            Adresse.s=trim(mid(Ligne.s,9,20))   
            Endif
            qua.s=trim(mid(Ligne.s,21,len(ligne.s)))
            qua.s=Trim(qua.s,"0"):   qua.s=Trim(qua.s," ")   
            qua.s=stringField(qua.s,1," ")
            qua.s=trim(qua.s)            
            quantite.s=qua.s
            Debug Dates.s+"--->"+Adresse.s+"--->"+quantite.s
      Endif
Next L




_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Expression régulière date
MessagePosté: Dim 14/Avr/2019 22:38 
Hors ligne

Inscription: Dim 24/Juin/2018 1:20
Messages: 95
Merci @Cage :wink:

@Zorro elle fonctionne tout aussi bien en tout cas, c'est cool)

maintenant j'en suis à la dernière étape qui est l'impression sur papier!

avouons le, se n'est franchement pas évidant d'imaginer le dessin avec "MovePathCursor(X.d, Y.d [, Options])"
et "AddPathSegments(Segments$ [, Options])" :lol:

si il existe un éditeur tableau pour impression avec vecteur, je suis preneur))

Code:
Window=OpenWindow(#PB_Any, 0, 0, 400, 320, "", #PB_Window_SystemMenu | #PB_Window_ScreenCentered|#PB_Window_MinimizeGadget)

If Window
   ListIcon_ITEM = ListIconGadget(#PB_Any, 0, 0, 400, 300, "CODEGAN", 42,#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect|#PB_ListIcon_HeaderDragDrop|#PB_ListIcon_AlwaysShowSelection)
   
   AddGadgetColumn(ListIcon_ITEM, 1, "EAN",42)
   AddGadgetColumn(ListIcon_ITEM, 2, "PCB", 65)
   AddGadgetColumn(ListIcon_ITEM, 3, "Description", 40)
   AddGadgetColumn(ListIcon_ITEM, 4, "ADRESSE", 42)
   
   Button_Impr = ButtonGadget(#PB_Any, 0, 300, 70, 20, "Imprimer")
EndIf

For i=0 To 5
   AddGadgetItem(ListIcon_ITEM, i,Str(Random(4552,1224))+Chr(10)+"3561221244"+Str(Random(988,124))+Chr(10)+Str(Random(10,5))+Chr(10)+"Produit "+Str(i)+Chr(10)+"37-035-02 &gt; 32]]30/04/19 &gt; 36-042-05 &gt; 42]]30/04/19 &gt; 36-090-03 &gt; 72]]")
Next i

Repeat
   Event = WaitWindowEvent()
   WindowID = EventWindow()
   GadgetID = EventGadget()
   EventType = EventType()
   
   Select GadgetID
      Case Button_Impr   
         
         If PrintRequester()
            If StartPrinting("Liste à contrôler")
               
               If Not LoadFont(0, "Arial", 12)
                  Debug "Font impact non chargeable!"
               EndIf
               
               StartVectorDrawing(PrinterVectorOutput(#PB_Unit_Point))
               VectorFont(FontID(0),5)
               
               DrawVectorText("CODEGAN - EAN - PCB - DESCRIPTION - ADRESSE")
               
               For ln=0 To 5
                  codegan$ = GetGadgetItemText(ListIcon_ITEM, ln,0)
                  ean$ = GetGadgetItemText(ListIcon_ITEM, ln,1)
                  pcb$ = GetGadgetItemText(ListIcon_ITEM, ln,2)
                  desctmp$ = GetGadgetItemText(ListIcon_ITEM, ln,3)
                  adr$ = ReplaceString(GetGadgetItemText(ListIcon_ITEM, ln,4),"]]",#CRLF$)
                  
                  DrawVectorText(desctmp$+" "+codegan$+" "+ean$+" "+pcb$+" ")
                  DrawVectorText(adr$)
               Next ln
               
               StopVectorDrawing()
               StopPrinting()
            EndIf
         Else
            Debug "Erreur de parametrage d'imprimante"
         EndIf
         
   EndSelect
         
Until Event = #PB_Event_CloseWindow



Je suis incapable de faire figurer "CODEGAN - EAN - PCB - DESCRIPTION - ADRESSE" en en-tête dans un tableau!


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Expression régulière date
MessagePosté: Lun 15/Avr/2019 8:59 
Hors ligne

Inscription: Sam 08/Fév/2014 15:19
Messages: 1635
Citation:
avouons le, ce n'est franchement pas évidant d'imaginer le dessin avec "MovePathCursor(X.d, Y.d
C'est pourtant comme cela qu'on fait :)
et il suffit d'ajouter une seul ligne à ton programme.
Code:
...
  For ln=0 To 5
    MovePathCursor(0, ln * 30 + 20) ; <--- Décalage ligne + Décalage paragraphe
    codegan$ = GetGadgetItemText(ListIcon_ITEM, ln,0)
...

:idea: Tant qu'à utiliser la lib Vector, autant utiliser aussi ses fonctions de changement d'unité et travailler en mm plutôt qu'en dpi, ainsi pas besoin de se préoccuper de la résolution de l'imprimante.
Code:
StartVectorDrawing(PrinterVectorOutput(#PB_Unit_Millimeter))
Ça permet aussi de gérer les sauts de page facilement (puisqu'on travaille en coordonnées absolue) et remettre la ligne d'entête à chaque nouvelle page.

:idea: Remplacer le code html &gt; ('>') par autre chose car il ne sera pas interprété par l'imprimante.

:idea: Le plus souvent on se fabrique une macro ou une procédure qui encapsule le positionnement, le texte, fonte, couleur, type.

Pas besoin de lib externe, tout est dans dans PB donc pérennité du code.
:wink:

_________________
Windows 10 Famille x64 + Linux (Slackware, Debian sur Oracle VirtualBox 6.0), Raspberry Pi


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 19 messages ]  Aller à la page 1, 2  Suivante

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités


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