Recherche rapide dans un gros fichier inconnu

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

A toi XXX XXXXX!

On ne peut pas tout le temps ouvrir un fichier même en lecture. ça dépend qui l'a ouvert et comment il est ouvert.
Dernière modification par Ollivier le sam. 18/août/2007 3:13, modifié 1 fois.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Ouh la la !!!! que de reponses
Merci les amis de vos aides nombreuses, cela me fait chaud au coeur 8)
Ollivier a écrit :Tu sais Kcc, si tu ouvres ton fichier avec Notepad, et que tu lis avec PureBasic, n'oublie pas de fermer Notepad... Mh? :D :D
Je laisse bien fermé le NOTEPAD, ce n'est pas ça qui gene, je suis sur.
Par contre lui il arrive a lire, je ne sais pas si c'est jusqu'au bout ?
Il ecrit noir de hieroglyphe (normal puisque c'est un format à la c..,mais au milieu y'a ce qui m'interesse en ASCII)
Mais y'a pas deplantage, il est fort ce NOTEPAD, hein ?

Ce que j'ai oublié de vous dire c'est que je peux le copier sans bleme
cpl.bator a écrit :j'ai zappé cela de ton post, ne me dis pas que tu essayes de lire un fichier avec une adresse internet
imagine le truc
Bombseb a écrit :quand tu dis sur un serveur protégé ca veux dire quoi exactement ?
le chemin du fichier commence par quoi "http://leserveur" ou "\\leserveur" ?
Non non c'est sur un reseau interne, par l'explorateur, sur le serveur.

@CPL.BATOR

Je te remercie de ton code.
Je l'ai éssayé et il fait la meme erreur que le miens :cry:
à la ligne 23 = "ReadData(IdFichier,*Buffer, Size) "
File object not initialized :?
Et pourtant buffer remonte une adresse et size la taille du fichier.

Et comme dirais "jacques houille"
DIIIINGUEEEEE !!!
Anonyme

Message par Anonyme »

Ollivier a écrit :mon petit père , A toi mon grand!
:?
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

Kwai chang caine a écrit :Je te remercie de ton code.
Je l'ai éssayé et il fait la meme erreur que le miens :cry:
à la ligne 23 = "ReadData(IdFichier,*Buffer, Size) "
File object not initialized :?
Et pourtant buffer remonte une adresse et size la taille du fichier.
Et comme dirais "jacques houille"
DIIIINGUEEEEE !!!
Non, c'est normal :wink:
Si ReadFile() ne réussit pas, tu ne peux pas y accéder avec ReadData().

Il faut toujours vérifier le succès d'une fonction :

Code : Tout sélectionner

MonFichier = ReadFile(#PB_Any, "MonFichier")
If MonFichier
  ;
  ; Faire des trucs avec MonFichier
  ;
  CloseFile(MonFichier)
Else
  Debug "Marche pas ..."
EndIf
Quand à la raison du problème avec ReadFile(), c'est bien possible qu'il ne puisse pas ouvrir des fichiers déjà ouverts, s'il lui manque le flag #FILE_SHARE_READ.
Tu peux essayer de l'ouvrir via l'API Windows : regarde le fichier 'API-FileHandle.pbi' dans le répertoire 'Include' de jaPBe.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bonjour GNOZAL

Je te remercie de ta reponse, mais je suis peut etre le seul encore au monde a utiliser l'IDE de PURE :lol:

J'essaierais d'installer Japbe pour voir ce qu'il y a dans ce "'API-FileHandle.pbi' "

Encore merci de ton aide 8)
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

Voilà :

Code : Tout sélectionner

;info:Create and Read file with API
;Use PB-Memory
Structure API_FileHandle
  FHandle.l
  Buffer.l
  BufferLen.l
  ReadPos.l
  DataInBuffer.l
  readed.l
EndStructure

Procedure API_LOF(*File.API_FileHandle)
  ProcedureReturn GetFileSize_(*File\FHandle,0)
EndProcedure
Procedure API_CloseFile(*File.API_FileHandle)
  If *File\FHandle<>#INVALID_HANDLE_VALUE
    CloseHandle_(*File\FHandle)
  EndIf
  If *File\Buffer
    FreeMemory(*File\Buffer):*File\Buffer=0
  EndIf
EndProcedure
Procedure API_FileReadEx(*File.API_FileHandle,File$,BufferLen)
  *File\FHandle=CreateFile_(File$,#GENERIC_READ,#FILE_SHARE_READ,0,#OPEN_EXISTING,#FILE_ATTRIBUTE_NORMAL,0)
  If *File\FHandle=#INVALID_HANDLE_VALUE
    ProcedureReturn #False
  Else
    *File\BufferLen=BufferLen
    *File\Buffer=AllocateMemory(*File\BufferLen)
    *File\ReadPos=*File\Buffer
    *File\DataInBuffer=0
    ProcedureReturn #True
  EndIf
EndProcedure
Procedure API_FileRead(*File.API_FileHandle,File$)
  ProcedureReturn API_FileReadEX(*File,File$,1024*4)
EndProcedure
Procedure API_ReadData(*File.API_FileHandle,*Buffer,len)
  result=0
  If *File\DataInBuffer>=len
    CopyMemory(*File\ReadPos,*Buffer,len)
    *File\DataInBuffer-len
    If *File\DataInBuffer
      *File\ReadPos+len
    Else
      *File\ReadPos=*File\Buffer
    EndIf
    result=len
  Else
    If *File\DataInBuffer>0
      CopyMemory(*File\ReadPos,*Buffer,*File\DataInBuffer)
      *Buffer+*File\DataInBuffer
      result=*File\DataInBuffer
      len-*File\DataInBuffer
      *File\DataInBuffer=0
      *File\ReadPos=*File\Buffer
    EndIf
    If ReadFile_(*File\FHandle,*Buffer,len,@readed,0)<>0
      result+readed
      *File\readed+readed
    EndIf
  EndIf
  ProcedureReturn result
EndProcedure
Procedure API_CurrentPos(*File.API_FileHandle)
  ProcedureReturn *File\readed-*File\DataInBuffer
EndProcedure
Procedure API_ReadByte(*File.API_FileHandle)
  If *File\DataInBuffer=0
    If ReadFile_(*File\FHandle,*File\Buffer,*File\BufferLen,@readed,0)<>0
      *File\readed+readed
      *File\DataInBuffer=readed
      *File\ReadPos=*File\Buffer
    EndIf
  EndIf
  If *File\DataInBuffer
    result=PeekB(*File\ReadPos) &$FF : *File\ReadPos+1:*File\DataInBuffer-1
  Else
    result=-1
  EndIf
  ProcedureReturn result
EndProcedure
Procedure API_PushBackByte(*File.API_FileHandle)
  If *File\ReadPos>*File\Buffer
    *File\ReadPos-1:*File\DataInBuffer+1
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure
Procedure API_EOF(*File.API_FileHandle)
  If API_ReadByte(*File)=-1
    ProcedureReturn #True
  Else
    API_PushBackByte(*File)
    ProcedureReturn #False
  EndIf
EndProcedure
Procedure.s API_ReadString(*File.API_FileHandle)
  a$=""
  ende=#False
  Repeat
    byte=API_ReadByte(*File)
    Select byte
      Case 0:ende=#True
      Case 10:ende=#True:byte=API_ReadByte(*File):If byte<>13 And byte<>10 And byte<>0 And byte<>-1: API_PushBackByte(*File) :EndIf
      Case 13:ende=#True:byte=API_ReadByte(*File):If byte<>13 And byte<>10 And byte<>0 And byte<>-1: API_PushBackByte(*File) :EndIf
      Case -1:ende=#True
      Default
        a$+Chr(byte)
    EndSelect
  Until ende
  
  ProcedureReturn a$
EndProcedure
Procedure API_FileCreate(*File.API_FileHandle,File$)
  *File\FHandle=CreateFile_(File$,#GENERIC_WRITE	,0,0,#CREATE_ALWAYS	,#FILE_ATTRIBUTE_NORMAL,0)
  If *File\FHandle=#INVALID_HANDLE_VALUE
    ProcedureReturn #False
  Else
    ProcedureReturn #True
  EndIf
EndProcedure
Procedure API_WriteData(*File.API_FileHandle,*Buffer,len)
  If WriteFile_(*File\FHandle,*Buffer,len,@written,0)
    ProcedureReturn written
  Else
    ProcedureReturn 0
  EndIf
EndProcedure
Procedure API_WriteString(*File.API_FileHandle,a$)
  ProcedureReturn API_WriteData(*File,@a$,Len(a$))
EndProcedure
Procedure API_WriteStringN(*File.API_FileHandle,a$)
  a$+Chr(13)+Chr(10)
  ProcedureReturn API_WriteData(*File,@a$,Len(a$))
EndProcedure
Procedure API_Seek(*File.API_FileHandle,Pos,How)
  #Seek_Begin=#file_begin
  #Seek_Curent=#file_current
  #seek_End=#file_end
  result=SetFilePointer_(*File\FHandle,Pos,0,How)
  If result<>-1
    *File\DataInBuffer=0
    *File\readed=result
  EndIf
EndProcedure


; FHandle.API_FileHandle
; File$="Hallo.txt"
; random$=Str(Random(1000))
; Debug "random:"+random$
; If API_FileCreate(FHandle,File$)
;   API_WriteString(FHandle,"Test ")
;   API_WriteStringN(FHandle,"Hallo")
;   API_WriteStringN(FHandle,"Zeile 2")
;   API_WriteStringN(FHandle,"Zeile 3")
;   API_WriteStringN(FHandle,random$)
;   API_CloseFile(FHandle)
; EndIf
; Debug "---"
; If API_FileRead(FHandle,File$)
;   While API_EOF(FHandle)=#False
;     Debug API_ReadString(FHandle)
;   Wend
;   API_CloseFile(FHandle)
; EndIf
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

AAaaaahhh !!!

Tu es une mere pour moi 8)

Je regarde .....non j'ai pas dit que j'ai compris, les miracles c'est à noel :D , j'ai dit que je regarde et je te tiens au courant

Mille merci
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Nadine !!!
J'suis "dégoutanisé of the life" :cry:

Encore une erreur à la ligne 25 qui retourne un false :

Code : Tout sélectionner

If *File\FHandle=#INVALID_HANDLE_VALUE 
    ProcedureReturn #False 
Y commence à nous brouter les noyau ce fichier de serveur :?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

une idée serait de savoir quelle erreur est renvoyée par l'OS avec GetLastError_().

Code : Tout sélectionner

Macro LastErrorMessageRequester() 
  MessageRequester("LastError", Left(LastErrorMessage.s{4096}, FormatMessage_(#FORMAT_MESSAGE_FROM_SYSTEM, 0, GetLastError_(), 0, @LastErrorMessage, 4095, 0) - 2), #MB_ICONERROR)
EndMacro

distant$ = "\\monserveur\mondossier\monfichier.txt"

fichier$ = GetTemporaryDirectory() + "monfichier.txt"

If CopyFile(distant$, fichier$)
  
  If OpenFile(0, fichier$)
    
    MessageRequester("Information", "Fichier ouvert")
    
    CloseFile(0)
    
  Else
    
    LastErrorMessageRequester() 
    
  EndIf
  
  If Not DeleteFile(fichier$)
    LastErrorMessageRequester() 
  EndIf
  
Else
  
  LastErrorMessageRequester() 
  
EndIf
Image
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

J'suis en vacance et donc plus avec le fameux fichier qui me cause "boucou du soucis", je jeterais un "zieu" dans 10 jours.

Merci FLYPE
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Et ben... Y'en a qu'ont de la chance...
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Mefiance Ollivier, les apparences sont parfois trompeuses....
J'echange sans reflechir mes vacances contre mon boulot.
Au boulot, c'est PC et prog (Enfin pour l'instant)
En vacances, c'est beton, moellon, perfo, etc ..... et tout ça presque tous les jours, et cela depuis pres de 16 ans :cry:

Vivement le boulot que je me repose :D
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Moi c'est boulot, boulot, boulot, vacances=stage, boulot, boulot...
La prog est une passion.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Bah moi je programme à donf depuis 3 ans en entreprise.
C'est aussi une passion pour moi, c'est ce qui me fait tenir...
mais vu le rythme, sans vacances, je pèterais un fusible.
Image
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

La seule différence fondamentale par rapport à vous, c'est que ma deuxième passion c'est la plongée sous-marine. Je suis en vacances tous les soirs de l'année...

Mais le rapport condition de vie/gain de vie n'est pas le même.
Répondre