Recherche rapide dans un gros fichier inconnu

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Recherche rapide dans un gros fichier inconnu

Message par Kwai chang caine »

Bonjour à tous

Voila, je voudrais savoir quelle serait votre méthode si vous vous trouviez devant un gros fichier dont vous ne connaissez pas le format et qui est sans extension bien sur, avec des hieroglyphes et de l'ASCII par ci et par la et que vous voudriez retrouver des phrases dans les parties disséminées d'ASCII dans ce fichier.
Et ceci le plus rapidement possible.

Cerise sur le ponpon, apparement ce fichier est sur un serveur protégé et je peux l'ouvrir avec NOTEPAD mais pas avec ce code 8O .

Quelqu'un sait il pourquoi ?

Code : Tout sélectionner

Fichier$= "c:\Fichier" 
IdFichier = ReadFile(#PB_Any, Fichier$) 
Size = FileSize(Fichier$) 
*Buffer = AllocateMemory(Size) 
ReadData(IdFichier,*Buffer, Size) 
  
Repeat 
 Caractere = PeekB(*Buffer + Lng)
 Debug Chr(Caractere)
 Lng + 1 
Until Lng >= Size 

FreeMemory(*Buffer) 
Je vous remercie
Bonne journée
Anonyme

Message par Anonyme »

salut tchang , ton code marche nickel , du moins sous le pinguoin... j'vois pas se qui cloche... droit d'accès ??
Lna
Messages : 181
Inscription : mar. 21/juin/2005 11:11

Message par Lna »

Bonjour,

Alors comme ça, on se lance dans le corsairage ? 8)

Code : Tout sélectionner

Fichier$= "c:\Fichier" 
IdFichier = ReadFile(#PB_Any, Fichier$) 

Debug FileSize(Fichier$)  ; pour connaître le nombre de tera

Size=20 ; pour voir si la lecture est déjà possible

*Buffer = AllocateMemory(Size) 
ReadData(IdFichier,*Buffer, Size) 
  
Repeat 
 Caractere = PeekB(*Buffer + Lng) 
 Debug Chr(Caractere) 
 Lng + 1 
Until Lng >= Size 

FreeMemory(*Buffer) 
Ca donnera déjà une idée. :idea:

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

Message par Kwai chang caine »

Bonjour à tous les deux

@CPL.BATOR

Je pense aussi que c'est une autorisation, qui me manque, mais pourquoi le NOTEPAD il en a pas besoin 8O
Peut etre ne lit il pas jusqu'au bout le fichier ?
Ou bien si on l'arrete, il dit rien et affiche ce qu'il a déjà :roll:

@LNA

Tu va rire (Enfin j'suis pas sur :roll:)
Mais il fait aucun TERA (meme pas de johnson :D ), il fait 12 MO (des mégaoctets pas des "Mots" :lol:)
En fait je viens de m'appercevoir que c'est le reseau qui rame un max, 10 MO, t'imagine y'a le WIFI, le Bluetooth etc ...et ma prehistoboite elle a un reseau de 10 MO Ouaaarf ouaarf :lol: :lol:

Bref donc mon "gros" fichier est petit en fait = 12308520, mais ça ne resoud pas le fait que ça plante a la ligne 9 = File object not initialized.
Normal la variable "IdFichier" est à 0 :?

Comme le dit CPL, Pure ne doit pas pouvoir lire ce que NOTEPAD lit :?

En fait ce que j'ai fait, et comme dab, c'est du "pire ratage" :lol:

Encore merci de votre aide
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

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

Sinon pour un gros fichier, tu... Hou, mais j'ai pas vu que c'était torduratage ton histoire! Allez, fais appel à ton 6ème sens!
Anonyme

Message par Anonyme »

Essaye ca :

Code : Tout sélectionner

Fichier$= "/home/jerome/bin/purebasic/compilers/engine3d.so"
IdFichier = 0
ReadFile(IdFichier, Fichier$)
Size.q = FileSize(Fichier$)

If Size=-1
   MessageRequester("Erreur","le fichier n'existe pas ou l'adresse : "+Fichier$+" est incorecte")
    End 
      ElseIf Size=-2
     MessageRequester("Erreur","le fichier n'existe pas , c'est un répertoire")
   End 
EndIf 


*Buffer = AllocateMemory(Size)

If *Buffer = #Null
  MessageRequester("Erreur","Impossible d'allouer "+Str(Size)+"octets")
    End 
      EndIf 


ReadData(IdFichier,*Buffer, Size)
 
Repeat
 Caractere = PeekB(*Buffer + Lng)
 
 If Caractere = 13
  Debug Line$
  Line$=""
 
  Else 
  Line$ + Chr(Caractere)
 EndIf 
 
 
 Lng + 1
Until Lng >= Size

FreeMemory(*Buffer)

Tu sais Kcc, si tu ouvres ton fichier avec Notepad, et que tu lis avec PureBasic, n'oublie pas de fermer Notepad... Mh?
tu peut l'ouvrir autant de fois que tu veut, cela ne change rien, il demande juste un acces en lecture.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@Cpl

Je pense que ta dernière phrase un peu hâtive!
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

quand tu dis sur un serveur protégé ca veux dire quoi exactement ?

le chemin du fichier commence par quoi "http://leserveur" ou "\\leserveur" ?

si c'est "http://" ca ne marchera pas avec un readfile...
Anonyme

Message par Anonyme »

Ollivier a écrit :@Cpl

Je pense que ta dernière phrase un peu hâtive!

Code : Tout sélectionner

For i = 0 To 10
Debug "Lecture = "+Str( ReadFile(i, Fichier$) )
Next 
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Code : Tout sélectionner

Fichier$ = "C:\Windows\System32\Config\system."
Cpl? Résultat?
Dernière modification par Ollivier le mer. 08/août/2007 22:19, modifié 1 fois.
Anonyme

Message par Anonyme »

Ollivier a écrit :

Code : Tout sélectionner

Fichier$ = "C:\Windows\System\Config."
Cpl? Résultat?
je ne te suis pas :P

- Config quoi ?:
C:\Windows\System\Config.
For i = 0 To 10
Debug "Lecture = "+Str( ReadFile(i, Fichier$) )
Next
Debug va te renvoyer 11 pointeur différent vers fichier$ :roll:
Dernière modification par Anonyme le sam. 18/août/2007 14:37, modifié 1 fois.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Coriace le Cpl :D

Code : Tout sélectionner

Dim Mot$(1)
Mot$(0) = "Non"
Mot$(1) = "Oui"
Fichier$ = "C:\Windows\System32\Config\System."
Existant = FileSize(Fichier$)
If Existant = -1
  Rep.S = "Non"
Else
  Rep = "Oui"
EndIf
Debug "Existant? " + Rep
Debug "Possible de l'ouvrir? " + Mot$(ReadFile(-1, Fichier$) )
Et ne me sors pas que c'est un dossier!!
Anonyme

Message par Anonyme »

Ollivier a écrit :

Code : Tout sélectionner

Fichier$ = "C:\Windows\System32\Config\system."
Cpl? Résultat?
edit : Pourquoi tu met un Point apres system, parcequ'il na pas d'extention ?

on ne parle pas de fichier systeme , mais d'un simple fichier.
même si windows est réputé pour le laissé aller dans se domaine , faut pas abusé non plus...

sous le pinguoin c'est pareil , du moment que je ne suis pas en root, je ne peut pas lire les fichiers système, heureusement d'ailleurs.

quand tu dis sur un serveur protégé ca veux dire quoi exactement ?

le chemin du fichier commence par quoi "http://leserveur" ou "\\leserveur" ?

si c'est "http://" ca ne marchera pas avec un readfile...
@kcc :
j'ai zappé cela de ton post, ne me dis pas que tu essayes de lire un fichier avec une adresse internet :D
imagine le truc

Code : Tout sélectionner

if OpenFile(0,"Http://Nasa.us//OnApasMarcherSurLaLune.doc")
else
messagerequester("erreur","impossible d'ouvrir le fichier de la nasa ! ")
endif
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Et puis là, XXX XXXXX XXXX, tu vas y passer des heures à me l'ouvrir celui-là...
Dernière modification par Ollivier le sam. 18/août/2007 3:04, modifié 1 fois.
Anonyme

Message par Anonyme »

Ollivier a écrit :Et puis là, mon petit père, tu vas y passer des heures à me l'ouvrir celui-là...
a qui tu parles ? 8O
Répondre