Programme ne répond pas mais fonctionne sans affichage.

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Georges38rmb
Messages : 6
Inscription : jeu. 12/mai/2016 19:16

Programme ne répond pas mais fonctionne sans affichage.

Message par Georges38rmb »

Bonjour,
Je suis nouveau sur ce forum.
Je commence à programmer avec Purebasic avec les bases de Quick Basic.
Je viens de réaliser un programme qui permet d'extraire les lignes contenues dans une liste de fichier (liste 1) qui contiennent un des 100 critères définis dans un fichier (liste 2). Ces lignes sont rassemblées dans un fichier du même nom que le critère recherché. Ces lignes sont supprimées des fichiers de la liste 1.

Le programme démarre puis "ne répond pas" s'affiche dans le titre de la fenêtre. Le programme continue à fonctionner mais l'affichage de la progression et des résultats est figé jusqu'à la fin du programme.
J'aimerais être aidé sur ce projet. Une copie du code peut être fourni mais comment le faire ?

Merci d'avance

Georges.
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par microdevweb »

Sans un code exemple difficile de répondre
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Georges38rmb
Messages : 6
Inscription : jeu. 12/mai/2016 19:16

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par Georges38rmb »

Quelle est la bonne procédure pour afficher le code de mon programme ?
Georges38rmb
Messages : 6
Inscription : jeu. 12/mai/2016 19:16

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par Georges38rmb »

Code : Tout sélectionner

;
; ------------------------------------------------------------
;
;   Extracteur pour max. 100 critères - V 1.0
;
;    (c) 2016 - Georges (12/05/2016)
;
; ------------------------------------------------------------
;

Dim GG$(100)
Dim CPT(100)
Dim XA(100)
Dim YA(100)
Dim XB(100)
Dim YB(100)

XA(1)=10 : YA(1)=175 : XB(1)=80 : YB(1)=175
XA(2)=10 : YA(2)=200 : XB(2)=80 : YB(2)=200
XA(3)=10 : YA(3)=225 : XB(3)=80 : YB(3)=225
XA(4)=10 : YA(4)=250 : XB(4)=80 : YB(4)=250
XA(5)=10 : YA(5)=275 : XB(5)=80 : YB(5)=275
XA(6)=10 : YA(6)=300 : XB(6)=80 : YB(6)=300
XA(7)=10 : YA(7)=325 : XB(7)=80 : YB(7)=325
XA(8)=10 : YA(8)=350 : XB(8)=80 : YB(8)=350
XA(9)=10 : YA(9)=375 : XB(9)=80 : YB(9)=375
XA(10)=10 : YA(10)=400 : XB(10)=80 : YB(10)=400
XA(11)=10 : YA(11)=425 : XB(11)=80 : YB(11)=425
XA(12)=10 : YA(12)=450 : XB(12)=80 : YB(12)=450
XA(13)=10 : YA(13)=475 : XB(13)=80 : YB(13)=475
XA(14)=10 : YA(14)=500 : XB(14)=80 : YB(14)=500
XA(15)=10 : YA(15)=525 : XB(15)=80 : YB(15)=525
XA(16)=10 : YA(16)=550 : XB(16)=80 : YB(16)=550
XA(17)=10 : YA(17)=575 : XB(17)=80 : YB(17)=575
XA(18)=10 : YA(18)=600 : XB(18)=80 : YB(18)=600
XA(19)=10 : YA(19)=625 : XB(19)=80 : YB(19)=625
XA(20)=10 : YA(20)=650 : XB(20)=80 : YB(20)=650
XA(21)=144 : YA(21)=175 : XB(21)=214 : YB(21)=175
XA(22)=144 : YA(22)=200 : XB(22)=214 : YB(22)=200
XA(23)=144 : YA(23)=225 : XB(23)=214 : YB(23)=225
XA(24)=144 : YA(24)=250 : XB(24)=214 : YB(24)=250
XA(25)=144 : YA(25)=275 : XB(25)=214 : YB(25)=275
XA(26)=144 : YA(26)=300 : XB(26)=214 : YB(26)=300
XA(27)=144 : YA(27)=325 : XB(27)=214 : YB(27)=325
XA(28)=144 : YA(28)=350 : XB(28)=214 : YB(28)=350
XA(29)=144 : YA(29)=375 : XB(29)=214 : YB(29)=375
XA(30)=144 : YA(30)=400 : XB(30)=214 : YB(30)=400
XA(31)=144 : YA(31)=425 : XB(31)=214 : YB(31)=425
XA(32)=144 : YA(32)=450 : XB(32)=214 : YB(32)=450
XA(33)=144 : YA(33)=475 : XB(33)=214 : YB(33)=475
XA(34)=144 : YA(34)=500 : XB(34)=214 : YB(34)=500
XA(35)=144 : YA(35)=525 : XB(35)=214 : YB(35)=525
XA(36)=144 : YA(36)=550 : XB(36)=214 : YB(36)=550
XA(37)=144 : YA(37)=575 : XB(37)=214 : YB(37)=575
XA(38)=144 : YA(38)=600 : XB(38)=214 : YB(38)=600
XA(39)=144 : YA(39)=625 : XB(39)=214 : YB(39)=625
XA(40)=144 : YA(40)=650 : XB(40)=214 : YB(40)=650
XA(41)=278 : YA(41)=175 : XB(41)=348 : YB(41)=175
XA(42)=278 : YA(42)=200 : XB(42)=348 : YB(42)=200
XA(43)=278 : YA(43)=225 : XB(43)=348 : YB(43)=225
XA(44)=278 : YA(44)=250 : XB(44)=348 : YB(44)=250
XA(45)=278 : YA(45)=275 : XB(45)=348 : YB(45)=275
XA(46)=278 : YA(46)=300 : XB(46)=348 : YB(46)=300
XA(47)=278 : YA(47)=325 : XB(47)=348 : YB(47)=325
XA(48)=278 : YA(48)=350 : XB(48)=348 : YB(48)=350
XA(49)=278 : YA(49)=375 : XB(49)=348 : YB(49)=375
XA(50)=278 : YA(50)=400 : XB(50)=348 : YB(50)=400
XA(51)=278 : YA(51)=425 : XB(51)=348 : YB(51)=425
XA(52)=278 : YA(52)=450 : XB(52)=348 : YB(52)=450
XA(53)=278 : YA(53)=475 : XB(53)=348 : YB(53)=475
XA(54)=278 : YA(54)=500 : XB(54)=348 : YB(54)=500
XA(55)=278 : YA(55)=525 : XB(55)=348 : YB(55)=525
XA(56)=278 : YA(56)=550 : XB(56)=348 : YB(56)=550
XA(57)=278 : YA(57)=575 : XB(57)=348 : YB(57)=575
XA(58)=278 : YA(58)=600 : XB(58)=348 : YB(58)=600
XA(59)=278 : YA(59)=625 : XB(59)=348 : YB(59)=625
XA(60)=278 : YA(60)=650 : XB(60)=348 : YB(60)=650
XA(61)=412 : YA(61)=175 : XB(61)=482 : YB(61)=175
XA(62)=412 : YA(62)=200 : XB(62)=482 : YB(62)=200
XA(63)=412 : YA(63)=225 : XB(63)=482 : YB(63)=225
XA(64)=412 : YA(64)=250 : XB(64)=482 : YB(64)=250
XA(65)=412 : YA(65)=275 : XB(65)=482 : YB(65)=275
XA(66)=412 : YA(66)=300 : XB(66)=482 : YB(66)=300
XA(67)=412 : YA(67)=325 : XB(67)=482 : YB(67)=325
XA(68)=412 : YA(68)=350 : XB(68)=482 : YB(68)=350
XA(69)=412 : YA(69)=375 : XB(69)=482 : YB(69)=375
XA(70)=412 : YA(70)=400 : XB(70)=482 : YB(70)=400
XA(71)=412 : YA(71)=425 : XB(71)=482 : YB(71)=425
XA(72)=412 : YA(72)=450 : XB(72)=482 : YB(72)=450
XA(73)=412 : YA(73)=475 : XB(73)=482 : YB(73)=475
XA(74)=412 : YA(74)=500 : XB(74)=482 : YB(74)=500
XA(75)=412 : YA(75)=525 : XB(75)=482 : YB(75)=525
XA(76)=412 : YA(76)=550 : XB(76)=482 : YB(76)=550
XA(77)=412 : YA(77)=575 : XB(77)=482 : YB(77)=575
XA(78)=412 : YA(78)=600 : XB(78)=482 : YB(78)=600
XA(79)=412 : YA(79)=625 : XB(79)=482 : YB(79)=625
XA(80)=412 : YA(80)=650 : XB(80)=482 : YB(80)=650
XA(81)=546 : YA(81)=175 : XB(81)=616 : YB(81)=175
XA(82)=546 : YA(82)=200 : XB(82)=616 : YB(82)=200
XA(83)=546 : YA(83)=225 : XB(83)=616 : YB(83)=225
XA(84)=546 : YA(84)=250 : XB(84)=616 : YB(84)=250
XA(85)=546 : YA(85)=275 : XB(85)=616 : YB(85)=275
XA(86)=546 : YA(86)=300 : XB(86)=616 : YB(86)=300
XA(87)=546 : YA(87)=325 : XB(87)=616 : YB(87)=325
XA(88)=546 : YA(88)=350 : XB(88)=616 : YB(88)=350
XA(89)=546 : YA(89)=375 : XB(89)=616 : YB(89)=375
XA(90)=546 : YA(90)=400 : XB(90)=616 : YB(90)=400
XA(91)=546 : YA(91)=425 : XB(91)=616 : YB(91)=425
XA(92)=546 : YA(92)=450 : XB(92)=616 : YB(92)=450
XA(93)=546 : YA(93)=475 : XB(93)=616 : YB(93)=475
XA(94)=546 : YA(94)=500 : XB(94)=616 : YB(94)=500
XA(95)=546 : YA(95)=525 : XB(95)=616 : YB(95)=525
XA(96)=546 : YA(96)=550 : XB(96)=616 : YB(96)=550
XA(97)=546 : YA(97)=575 : XB(97)=616 : YB(97)=575
XA(98)=546 : YA(98)=600 : XB(98)=616 : YB(98)=600
XA(99)=546 : YA(99)=625 : XB(99)=616 : YB(99)=625
XA(100)=546 : YA(100)=650 : XB(100)=616 : YB(100)=650

If ReadFile(0, "D:\QB64\LIFICH02.TXT")
  ;VERIFICATION SI FICHIER EXISTE
  Goto PROCED01
Else
  MessageRequester("Erreur à la lecture.","Le fichier : D:\QB64\LIFICH02.TXT n'existe pas",0)
  Goto FIN01
EndIf

PROCED01:
LR = 0
While Eof(0) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
  LIGNE1$ =  Trim(ReadString(0))
  ;MessageRequester("Attention", "Ligne en cours : "+LIGNE1$, 0)
  LR = LR + 1
  GG$(LR) = LIGNE1$
Wend
CloseFile(0)               ; Ferme le fichier précédemment ouvert

; ***** LE FICHIER LIFICH02 CONTIENT LES CRITERES DE RECHERCHE **************

If ReadFile(0, "D:\QB64\LIFICH01.TXT")
  ;VERIFICATION SI FICHIER EXISTE
  Goto PROCED02
Else
  MessageRequester("Erreur à la lecture.","Le fichier : D:\QB64\LIFICH01.TXT n'existe pas",0)
  Goto FIN01
EndIf

PROCED02:
S = 0
While Eof(0) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
  LIGNE2$ =  Trim(ReadString(0))
  ;MessageRequester("Attention", "Ligne en cours : "+LIGNE2$, 0)
  S =S + 1
Wend
CloseFile(0)               ; Ferme le fichier précédemment ouvert

; ***** LE FICHIER LIFICH01 CONTIENT LES NOMS DES FICHIERS A CONSULTER **************

; Chargement des images.
;
LoadImage(0, "cigle2.bmp")

OpenWindow(0, 100, 200, 700, 750, "Extracteur pour max. 100 critères V1.0", #PB_Window_ScreenCentered )
ImageGadget(0, 555, 20, 0, 0, ImageID(0))
ProgressBarGadget(203, 20, 710, 660, 20, Y, S)
TextGadget(206, 20,70,250,20,"Lignes supprimées : ")


For P = 1 To LR
  TextGadget(P, XA(P), YA(P), 60, 20, GG$(P),#PB_Text_Border)
Next P

For NS=1 To LR
  TextGadget(NS+100, XB(NS), YB(NS), 50, 20, CPT$,#PB_Text_Border)
Next NS

TextGadget(204, 20, 20, 200, 20, "Fichier : "+Y+" / "+S)
TextGadget(205, 20, 45, 200, 20, "Taille du fichier : "+TTF01+" octets")
ProgressBarGadget(203, 20, 710, 660, 20, Y, S)



If ReadFile(0, "D:\QB64\LIFICH01.TXT")
  ;VERIFICATION SI FICHIER EXISTE
  Goto PROCED03
  
Else
  MessageRequester("Erreur à la lecture.","Le fichier : D:\QB64\LIFICH01.TXT n'existe pas",0)
  Goto FIN01
EndIf

PROCED03:
CT = 0
Y = 0
TTF01 = 0
While Eof(0) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
  A$ =  Trim(ReadString(0))
  ;MessageRequester("Attention", "Ligne en cours : "+A$, 0)
  H$ = "F:\8DSN\" + A$
  Y = Y + 1
  If ReadFile(1, H$)
    ;VERIFICATION SI FICHIER EXISTE
    TTF01 = Lof(1)
    TTF02 = TTF02 + TTF01
    SetGadgetState(203, Y)
    JJD.f=(Y)/S
    JJD=JJD*100
    TextGadget(207, 340,690,150,20," "+JJD+" %")
    SetGadgetText(204, "Fichier : "+Y+" / "+S)
    SetGadgetText(205, "Taille du fichier : "+TTF01+" octets")
    ;Delay(100)
    Goto PROCED04
  Else
    MessageRequester("Erreur à la lecture.","Le fichier : "+H$+" n'existe pas",0)
    Goto FIN01
  EndIf
  
  PROCED04:
  JV = 0
  If OpenFile(2, "F:\1\TEMPO33.TXV")
    ; Ligne vide
    Goto PROCED05
  Else
    MessageRequester("Erreur", "Le fichier TEMPO33 ne peut etre créé", 0)
    Goto FIN01
  EndIf
  
  PROCED05:
  Z = 0
  SA = 0
  While Eof(1) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
    B$ =  Trim(ReadString(1))
    ;MessageRequester("PureBasic", "Ligne en cours : "+A$, 0)
    SA = SA + 1
    If Len(B$) < 1
      Goto PAS02
    Else
    EndIf
    
    STE03:
    B$ = UCase(B$)
    
    PAS44:
    
    For LT = 1 To LR
      Position = FindString(B$, GG$(LT))
      
      If Position > 0
        HT = 1
        Z = Z + 1
        X = X + 1
        FL$ = GG$(LT)
        CPT(LT) = CPT(LT) + 1
        CPT$ = Str(CPT(LT))
        CPTT = CPTT+1
        SetGadgetText(LT+100, CPT$)
        ;SetGadgetColor(LT+100, #PB_Gadget_BackColor, $0000FF)
        ;Delay(100)
        ;TextGadget(LT+100, XB(LT), YB(LT), 50, 20, CPT$,#PB_Text_Border ,#PB_Text_Right)
        Goto PAS57
      Else
      EndIf
    Next LT
    
    PAS57:
    
    HT = 0
    
    PAS60:
    QR$ = "F:\MEENS\BILANF09\" + FL$ + ".TRA"
    
    If Z > 0
      
      If OpenFile(3, QR$)
        FileSeek(3, Lof(3))         ; Place le pointeur à la fin du fichier en utilisant le résultat de Lof()
                                    ; Ligne vide
      Else
        MessageRequester("Erreur fichier 3", "Le fichier ne peut etre créé", 0)
        Goto Fin01
      EndIf
    Else
      
    EndIf
    
    If Z > 0
      WriteStringN(3, B$)
      CloseFile(3)
    Else
      
    EndIf
    
    If Z = 0
      WriteStringN(2, B$)
    Else
      
    EndIf
    
    PAS02:
    
    
    Z = 0
  Wend
  
  PAS58:
  CloseFile(1)
  CloseFile(2)
  DeleteFile(H$)
  
  RenameFile("F:\1\TEMPO33.TXV", H$)    
  
  ;YT$ = "F:\1\TEMPO33.TXV"
  ;DeleteFile(YT$)
  
  
  PAS01:
  SetGadgetText(206,"Lignes supprimées : "+CPTT)
  ;Delay(100)   
Wend
CloseFile(0)

PAS56:

PAS55:
Goto PAS7

PAS5:
;Input()
FIN01:
End
PAS7:
MessageRequester("Fin du programme", "Tout s'est exécuté sans problème.", 0)
End
Georges38rmb
Messages : 6
Inscription : jeu. 12/mai/2016 19:16

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par Georges38rmb »

Petite précision, je recherche maximum 100 critères contenus dans un fichier texte nommé "LIFICH02.TXT".
Je recherche ces critères dans ± 243.000 fichiers texte dont la liste est dans le fichier texte nommé "LIFICH01.TXT"
L'ensemble de ces 243.000 fichiers correspond à un volume de 40Gb et le plus gros fichier fait environ 700Mb.

Georges.
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par Fig »

Bonjour et bienvenue.

Essais l'instruction "debug" (elle affiche une valeur ou un message hors de ton programme, ca te permet de suivre son déroulement à la trace)

Place là un peu partout dans ton listing et regarde à quel moment ça bloque... Ca t'aidera déjà à cerner d'où vient le problème.

Ensuite en ce qui concerne la manière de programmer... Ca évoluera ne t'inquiète pas. On n'utilise quasiment plus de Goto ou alors de manière extrêmement rare. Regarde l'instruction "procedure" qui se rapproche d'un call/gosub pour te donner une analogie.
Idem au début du programme tu peux utiliser les instructions "datasection" et "data" pour initialiser ton tableau plus facilement...
Dernière modification par Fig le jeu. 12/mai/2016 22:31, modifié 1 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par comtois »

Petite remarque vite fait en passant, oublie le goto !
Apprends à utiliser les procédures , ça va grandement te faciliter la vie, et ça sera plus simple pour t'aider.

Commence doucement pour apprivoiser PureBasic, et ensuite quand tu seras plus à l'aise tu pourras songer à faire ton prog avec tes critères.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par falsam »

Bonjour et bienvenu Georges.
Le programme continue à fonctionner mais l'affichage de la progression et des résultats est figé jusqu'à la fin du programme.
Je me suis arrêté sur cette partie du code

Code : Tout sélectionner

OpenWindow(0, 100, 200, 700, 750, "Extracteur pour max. 100 critères V1.0", #PB_Window_ScreenCentered )
ImageGadget(0, 555, 20, 0, 0, ImageID(0))
ProgressBarGadget(203, 20, 710, 660, 20, Y, S)
TextGadget(206, 20,70,250,20,"Lignes supprimées : ")

For P = 1 To LR
  TextGadget(P, XA(P), YA(P), 60, 20, GG$(P),#PB_Text_Border)
Next P

For NS=1 To LR
  TextGadget(NS+100, XB(NS), YB(NS), 50, 20, CPT$,#PB_Text_Border)
Next NS

TextGadget(204, 20, 20, 200, 20, "Fichier : "+Y+" / "+S)
TextGadget(205, 20, 45, 200, 20, "Taille du fichier : "+TTF01+" octets")
ProgressBarGadget(203, 20, 710, 660, 20, Y, S))
- Deux ProgressBarGadget avec le même identifiant 203
- Une succession de TextGadget qui auront les même identifiants entres eux.
- Pas de gestion d’événements de fenêtre (Dans ce cas je pense que ce n'est pas obligatoire)
- Pas de thread (dans ton cas) pour mettre à jour la barre de progression.

Tout comme Comtois, revoir les bases de Purebasic avant de t'engager dans ce type de code.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par Fig »

On sent que tu sais programmer la structure de ton programme ressemble à de l'assembleur en fait...

Ceci:

Code : Tout sélectionner

  If OpenFile(2, "F:\1\TEMPO33.TXV")
    ; Ligne vide
    Goto PROCED05
  Else
    MessageRequester("Erreur", "Le fichier TEMPO33 ne peut etre créé", 0)
    Goto FIN01
  EndIf
  
  PROCED05:
Peut être avantageusement remplacé par cela:

Code : Tout sélectionner

  If OpenFile(2, "F:\1\TEMPO33.TXV")=0
    MessageRequester("Erreur", "Le fichier TEMPO33 ne peut etre créé", 0)
    end
  EndIf
  
  PROCED05:
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par comtois »

et un exemple de procédure pour lire tes critères

Code : Tout sélectionner

Global Dim GG$(100)

Procedure LectureCritere()
  Protected LR
  If ReadFile(0, "D:\QB64\LIFICH02.TXT")

    While Eof(0) = 0  And LR <100    ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
      LIGNE1$ =  Trim(ReadString(0))
      ;MessageRequester("Attention", "Ligne en cours : "+LIGNE1$, 0)
      LR = LR + 1
      GG$(LR) = LIGNE1$
    Wend
    CloseFile(0) 
  Else
    MessageRequester("Erreur à la lecture.","Le fichier : D:\QB64\LIFICH02.TXT n'existe pas",0)
    End
  EndIf    
  
EndProcedure
 

LectureCritere()
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par comtois »

Fig a écrit :On sent que tu sais programmer
Oui sans aucun doute.

Il faut juste qu'il s'adapte à un autre langage qui permet de faire tellement plus de choses que les anciens basic. ça viendra vite, je n'en doute pas.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par comtois »

Autre chose, n'hésite pas à choisir des noms de variables explicites.

Dim Critere$(100) c'est quand même plus compréhensible que Dim GG$(100)

Et petite astuce,

LR = LR + 1 peut aussi s'écrire LR + 1 (tu verras beaucoup de codes PureBasic qui utilise ce raccourci)
Idem avec -, *, /
LR = LR / 4 peut s'écrire LR / 4

Mais là, ce n'est pas indispensable d'utiliser ce truc là :)
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Georges38rmb
Messages : 6
Inscription : jeu. 12/mai/2016 19:16

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par Georges38rmb »

Que veut dire "Protected LR" ?

Lorsque l'on crée une procédure, elle doit etre appelée pour etre exécutée ?

Merci pour vos réponses, je me sens un peu moins seul.

Georges.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par falsam »

Georges38rmb a écrit :Que veut dire "Protected LR" ?
ça veut dire que la variable est uniquement valable dans la procédure ou elle figure.
Georges38rmb a écrit :Lorsque l'on crée une procédure, elle doit etre appelée pour etre exécutée ?
oui.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Programme ne répond pas mais fonctionne sans affichage.

Message par falsam »

Un code récapitulatif de ce qu'on vient de dire.

■ Objectif
- Créer un fichier bidon contenant 1000 enregistrement et le lire tout en mettant la barre de progression à jour.
- Utilisation des procédures.
- Utilisation des évenements.
- Utilisation de variable locales à une procédure (Variables Protected)

Code : Tout sélectionner

Enumeration Window
  #MainForm
EndEnumeration

Enumeration Gadget
  #Go   ;Pour l'icone qui permet de lancer le traitement
  #Exit ;Pour la sortie de l'application
  #PBar ;La barre de progression
EndEnumeration

;Déclaration des procédures
Declare FileCreate()
Declare ProgressBarUpdate()
Declare Exit()

;Affichage de la fenetre
If OpenWindow(#MainForm, 0, 0, 800, 600, "New Project", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)      
  ButtonGadget(#Go, 700, 20, 80, 22, "Click ME")
  ButtonGadget(#Exit, 700, 50, 80, 22, "Exit")
  ProgressBarGadget(#PBar, 10, 550, 780, 22, 0, 1000)
  
  ;Boucle evenementielle
  Repeat 
    Select WaitWindowEvent() ;Il y a t'il un evenement ?
        
      Case #PB_Event_CloseWindow ;La fenetre est fermée
        Exit() 
        
      Case #PB_Event_Gadget ;Un evenement gadget vient de se produire
        Select EventGadget();Quel est ce gadget qui produit l'évenement
          Case #Go
            FileCreate() ;Appel de la procédure pour créer un fichier de test
            ProgressBarUpdate() ;Appel de la procedure poour mettre à jour la barre de progression.
            
          Case #Exit
            Exit() ;Appel de la procédure de sortie
        EndSelect
    EndSelect
  ForEver
EndIf

;Création d'un fichier de test
Procedure FileCreate()
  Protected a ;Cette variable est uniquement visible dans la procédure FileCreate
  
  If CreateFile(0, "Text.txt")         ; we create a new text file...
    For a=1 To 1000
      WriteStringN(0, "Line "+Str(a))  ; we write 10 lines (each with 'end of line' character)
    Next
    CloseFile(0)                       ; close the previously opened file and store the written data this way
  Else
    MessageRequester("Information","may not create the file!")
  EndIf    
EndProcedure

;Procedure de mise à jour de la barre de progression
;C'est ici que par example qu'il faut traiter les fichiers 
Procedure ProgressBarUpdate()  
  Protected n
  
  If ReadFile(0, "Text.txt")   ; if the file could be read, we continue...
    While Eof(0) = 0           ; loop as long the 'end of file' isn't reached
      ReadString(0)
      n+1
      SetGadgetState(#PBar, n)
    Wend
    CloseFile(0)               ; close the previously opened file
  Else
    MessageRequester("Information","Couldn't open the file!")
  EndIf
EndProcedure

;Procedure de fin d'application
Procedure Exit()
  End
EndProcedure
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre