Besoin d'aide pour un de mes programmes SVP

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Xpetera
Messages : 52
Inscription : sam. 02/févr./2008 22:25

Besoin d'aide pour un de mes programmes SVP

Message par Xpetera »

Bonjour à tous !

Voilà j'ai une erreur je ne sais comment la résoudre ... :(

Le but du programme : faire une recherche dans le contenu des fichiers d'un dossier

Mon code :
Enumeration
#txt1
#txt2
#txtb1
#txtb2
#dir1
#button1
#fichier
#regex
EndEnumeration


OpenWindow(0,150,150,500,400,"")
CreateGadgetList(WindowID(0) )

;------TEXTES-----
TextGadget(#txt1,1,30,200,25,"Chemin du dossier a chercher : ")
TextGadget(#txt2,1,60,150,25,"Mot à rechercher : ")
;------------------

;---------- TEXT BOXES ---------
StringGadget(#txtb1,150,30,350,20,"C:\")
StringGadget(#txtb2,90,60,410,20,"dans une seule ligne")
;-------------------------------

;-------BOUTONS------
ButtonGadget(#button1,240,90,20,20,"ok")
;--------------------


Repeat
event = WindowEvent()


If event = #PB_Event_Gadget
Select EventGadget()
Case #button1
resultats$ = "Fichiers trouvés :" + Chr(10)
chemindossier$ = GetGadgetText(#txtb1) + "\"
recherche$ = GetGadgetText(#txtb2)
CreateRegularExpression(#regex,recherche$)


ExamineDirectory(#dir1,chemindossier$,"*.*")
While NextDirectoryEntry(#dir1)
If DirectoryEntryName(#dir1) = "."
ElseIf DirectoryEntryName(#dir1) = ".."
ElseIf DirectoryEntryType(#dir1) = 2
Else

nomfichier$ = DirectoryEntryName(#dir1)
ReadFile(#fichier,nomfichier$)
If DirectoryEntryType(#dir1) = 1
While Eof(#fichier) = 0
ligne$ = ReadString(#fichier)
If MatchRegularExpression(#regex,ligne$)
resultats$ = resultats$ + DirectoryEntryName(#dir1) + Chr(10)
EndIf
CloseFile(#fichier)
Wend
EndIf
EndIf

Wend
FinishDirectory(#dir1)
MessageRequester("Resultats",resultats$)
EndSelect


EndIf

Until event = #WM_CLOSE
L'erreur est quand le programme veut lire le fichier , il dit "#File object not initialized" , pourtant j'ai bien tout déclaré , qu'est-ce qui ne va pas ? :(

Merci pour vos réponses. :)
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Tu fermes ton fichier ua mauvais endroit et toujours apres la premiere ligne lue !!!

Lio :wink:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Xpetera
Messages : 52
Inscription : sam. 02/févr./2008 22:25

Message par Xpetera »

J'ai modifié la position du CloseFile et ReadFile :


Code : Tout sélectionner

Enumeration
#txt1
#txt2
#txtb1
#txtb2
#dir1
#button1
#fichier
#regex
EndEnumeration


OpenWindow(0,150,150,500,400,"")
CreateGadgetList(WindowID(0) )

;------TEXTES-----
TextGadget(#txt1,1,30,200,25,"Chemin du dossier a chercher : ")
TextGadget(#txt2,1,60,150,25,"Mot à rechercher : ")
;------------------

;---------- TEXT BOXES ---------
StringGadget(#txtb1,150,30,350,20,"C:\")
StringGadget(#txtb2,90,60,410,20,"dans une seule ligne")
;-------------------------------

;-------BOUTONS------
ButtonGadget(#button1,240,90,20,20,"ok")
;--------------------


Repeat
event = WindowEvent() ; la boucle pour éviter que ca se ferme direct


If event = #PB_Event_Gadget
Select EventGadget()
Case #button1
resultats$ = "Fichiers trouvés :" + Chr(10)
chemindossier$ = GetGadgetText(#txtb1) + "\"
recherche$ = GetGadgetText(#txtb2)
CreateRegularExpression(#regex,recherche$)


ExamineDirectory(#dir1,chemindossier$,"*.*")
While NextDirectoryEntry(#dir1)
If DirectoryEntryName(#dir1) = "."
ElseIf DirectoryEntryName(#dir1) = ".."
ElseIf DirectoryEntryType(#dir1) = 2
Else

nomfichier$ = DirectoryEntryName(#dir1)


If DirectoryEntryType(#dir1) = 1
ReadFile(#fichier,nomfichier$)

While Eof(#fichier) = 0
ligne$ = ReadString(#fichier)
If MatchRegularExpression(#regex,ligne$)
resultats$ = resultats$ + DirectoryEntryName(#dir1) + Chr(10)
EndIf

Wend
CloseFile(#fichier)
EndIf
EndIf ; fin de si le dossier est pas . ou ..

Wend
FinishDirectory(#dir1)
MessageRequester("Resultats",resultats$)
EndSelect


EndIf

Until event = #WM_CLOSE
Mais il me sort toujours la même erreure. :(

PS: J'ai mis un de mes prog. sur ton site
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Essaye ça :

Code : Tout sélectionner

Enumeration
  #txt1
  #txt2
  #txtb1
  #txtb2
  #dir1
  #button1
  #fichier
  #regex
EndEnumeration


OpenWindow(0,150,150,500,400,"")
CreateGadgetList(WindowID(0) )

;------TEXTES-----
TextGadget(#txt1,1,30,200,25,"Chemin du dossier a chercher : ")
TextGadget(#txt2,1,60,150,25,"Mot à rechercher : ")
;------------------

;---------- TEXT BOXES ---------
StringGadget(#txtb1,150,30,350,20,"C:\")
StringGadget(#txtb2,90,60,410,20,"dans une seule ligne")
;-------------------------------

;-------BOUTONS------
ButtonGadget(#button1,240,90,20,20,"ok")
;--------------------


Repeat
  event = WindowEvent() ; la boucle pour éviter que ca se ferme direct
  
  
  If event = #PB_Event_Gadget
    Select EventGadget()
      Case #button1
        resultats$ = "Fichiers trouvés :" + Chr(10)
        chemindossier$ = GetGadgetText(#txtb1) + "\"
        recherche$ = GetGadgetText(#txtb2)
        CreateRegularExpression(#regex,recherche$)
        
        
        hDir.l = ExamineDirectory(#PB_Any,chemindossier$,"*.*")
        If hDir
          While NextDirectoryEntry(hDir)
            If DirectoryEntryType(hDir) = #PB_DirectoryEntry_File
              found.b = #False
              nomfichier$ = DirectoryEntryName(hDir)
              hFile.l = ReadFile(#PB_Any,nomfichier$)
              If hFile
                While Eof(hFile) = 0 And found = #False
                  ligne$ = ReadString(hFile)
                  If MatchRegularExpression(#regex,ligne$)
                    found = #True
                    resultats$ = resultats$ + nomfichier$ + Chr(10)
                  EndIf
                Wend
                CloseFile(hFile)
              EndIf
            EndIf 
          Wend
          FinishDirectory(hDir)
          MessageRequester("Resultats",resultats$)
        EndIf
    EndSelect
    
    
  EndIf
  
Until event = #WM_CLOSE
Lio
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Par contre faudra que tu utilise un Thread pour faire ça, sinon ta fenêtre va se geler... et l'utilisateur aura l'impression que le programme a planté !
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

lionel_om, j'ai essayé ton code et j'ai une erreur à cette endroit : CreateRegularExpression(#regex,recherche$)
Répondre