[R] Lecture de fichier octet par octet

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
poke123
Niveau 2
Niveau 2
Messages : 26
Enregistré le : mer. 24 mars 2010 14:22
Status : Hors ligne

[R] Lecture de fichier octet par octet

#1

Message par poke123 »

alors voila comme a mon habitude, avant de commencer un projet je commence par chercher ou bien, a défaut faire les outils dont j'ai besoin ici j'ai besoin de gérer un format de fichier un peu plus compliquer que image,son,texte... en effet je me suis attaquer au model en trois dimensions (.3ds,.ms3d,.max pour les connu) alors si tôt dit, si tôt remarquer que pour les lire il n'y à pas de fonction pré-formaté déjà toute faite et j'en passe. j'ai donc commencer par un premier "dégrossissage" avec des fonction pour charger le contenu binaire du fichier, écrire/lire des float,int,char,... et le sauvegarder OR c'est cette première fonction qui me pose problème non pas qu'elle "march pôôô" mais plutôt qu'elle est assez lente car pour 50 octets je ne perd pas de temps mais déjà 50 Ko c'est de trop pour avoir un délai raisonnable (et les fichier 3D font bien plus que 50 Ko donc je suis un peu embêté) je suis conscient que autoit n'est pas vraiment optimisé pour ça mais je suis sûr que on peu parvenir a des délais raisonnable pour des fichier ne dépassant pas un certain volume sauf que je ne sais pas comment (sinon je ne serais pas là :P )
alors voila la fonction qui me pose problème :
► Afficher le textevoir
si vous voulez je vous donne le reste mais les autre fonction sont optimisé et rapide c'est la seul qui est vraiment (au risque de me répéter) lente
merci d'avance ^^

ps: désoler pour le pavé je voulais être le plus clair possible (et aussi pour la grammaire chrome ne corrige pas ça :P )

edit: bon vu que ça n'inspire pas grand monde je vais continuer mon script comme si de rien n'était et je revient quand j'en serai aux finition c'est a dire que la vitesse devient un souci majeur
Modifié en dernier par poke123 le jeu. 20 mai 2010 18:05, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] lecture de fichier octet par octet

#2

Message par Tlem »

La lenteur de votre script vient évidement de la boucle For/Next de votre fonction.
Mais pour que certains puissent vous aider, il serait plus intéressent que vous donniez plus d'information sur le traitement à faire.

Il faut :
1 - Un exemple de fichier d'origine.
2 - Le détail de ce que vous voulez lire.
3 - La description de ce que vous voulez obtenir.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
SagePourpre
Niveau 7
Niveau 7
Messages : 442
Enregistré le : dim. 06 juil. 2008 09:11
Status : Hors ligne

Re: [..] lecture de fichier octet par octet

#3

Message par SagePourpre »

À première vue, je dirais que quelque chose comme

(code brouillon)

Code : Tout sélectionner

Local _
$fichier = 'C:\Users\Sage Pourpre\Desktop\UniversalViewer.exe', _ ; fichier quelconque
$pattern = '' ; Pattern de recherche valide dans le fichier
$replace = ; Remplacer par contenu voulu

Local _
$f = FileOpen($fichier,16) _
$r = FileRead($f)
FileClose($f)
$r = StringRegExpReplace($r,$pattern,$replace)

FileCopy($fichier,$fichier & '.bkp',1) ; Backup du fichier original
$f = FileOpen($fichier,18) ; Ouverture du fichier original pour écrasement de donnée avec le nouveau contenu provenant de stringRegExpReplace
FileWrite($f,$r)
FileClose($f)
 
irait plus vite pour trouver les éléments à remplacer et faire le remplacement
dans la boucle. Par contre, comme TLEM l'a mentionné, le peu d'informations précises
(voir message de TLEM ) sur l'exactitude des opérations à faire nuit à la possibilité de
fournir une réponse optimale.

Je crois quand même que StringRegExpReplace irait beaucoup plus vite que For... Next
Le Sage Pourpre, pour qui la vie est tellement
plus belle vue du haut de son Pouf = )
Avatar du membre
poke123
Niveau 2
Niveau 2
Messages : 26
Enregistré le : mer. 24 mars 2010 14:22
Status : Hors ligne

Re: [..] Lecture de fichier octet par octet

#4

Message par poke123 »

en fait le but est de pouvoir charger le fichier en mémoire pour le manipuler plus vite par la suite donc voila toute les autre fonctions qui vont avec:
► Afficher le texte
et je vous met un fichier et un csv type (je vous les heberge sur filebeam car du contenu binaire c'est lourd):
http://filebeam.com/e5af4edc78097f8b6056e33e11419f19
si vous ne me faite pas confiance pour le lien alors voila le début du csv:
► Afficher le texte
pour le csv vous ne pouvez l'ouvrir qu'avec notepad (le nombre de colonne des tableur a ses limite et c'est vilain de ne pas mettre de retour a la ligne ^^)
sinon je vais explorer le stringRegExpReplace (je connaissait pas ce truc ^^)
ah oui j'oubliait je lis un peu de tout dedans sa peu être des float (surtout vu que que dans un model 3d les position (x,y,z) sont des float) des uint32(j'ai souvent a faire a des pointeur) ou bien à des char (très minoritaire mais plutôt indispensable)
et j'écrit la même chose en général (sauf les char ils sont bien comme ils sont ^^)

ps: ah oui comme vous pouvez le constater j'ai commencer la fonction pour exporter le model au format geoplan/geospace un peu plus compréhensible pour un humain comme vous et moi ^^ au cas ou vous aurie besoin d'un fichier type voila:
► Afficher le texte
qui dessine trois points libre dans l'espace

si vous avez besoin de quoi que ce soit de plus il n'y a aucun problème évidement ^^
edit: ah oui j'oubliait le but principale est de pouvoir convertir d'un format a l'autre et de l'autre a l'un (bien que l'un contienne 10000 fois moins d'information il faut juste pouvoir bouger les point et "réinjecter" les nouvelle position dans le fichier)

encore un oublie monstrueux la structure du fichier:
► Afficher le texte
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

Re: [..] Lecture de fichier octet par octet

#5

Message par sylvanie »

Bonjour,
Je zyeuté un peu depuis ce matin, mais comme je ne peux pas répondre en journée, j'arrive peut être un peu tard ^^

je me suis focaliser sur la lecture byte par byte ou word par word dans l'absolu sans reprendre ce qui a été dit après sur le projet.
J'ai réalisé des tests sur différentes méthode :
la première et celle proposée (étalon)
la deuxième est basé sur des accès byte à byte
la troisième sur Dllstructxxxx
et la 4 eme sur les regexp

cf
► Afficher le texte
et voici pour ceux qui ne voudrai pas se lancer dans l'exécution ce que ça donne en millieconde sur 10 jeux de lecture d'1 Ko avec les 4 méthodes :
► Afficher le texte
il y a 2 tableaux me direz vous. En effet les méthodes 3 et 4 peuvent être accélérées si on saccrifie un peu le format du tableau de sortie attendu.
pour le cas 3, il s'agit d'un retours sous forme binaire
pours le cas 4, il n'y a pas la taille en début
Alors le premier tableau corresponds à des sorties rigoureusement égales (avec des moulinettes de ratrapage pour 3 et 4) ; et le deuxième c'est celui "à l'état brute"

Maintenant on voit que 3 et 4 sont assez équivalente en temps. Et bien 4 a ma préférence, car on peut la dériver en une fonction facilement capable de faire des lectures par bloc :
► Afficher le texte
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
poke123
Niveau 2
Niveau 2
Messages : 26
Enregistré le : mer. 24 mars 2010 14:22
Status : Hors ligne

Re: [..] Lecture de fichier octet par octet

#6

Message par poke123 »

*impressionné* personnellement je dit bravo j'en espérait pas tant je pense que je vais garder la N° 4 qui me semble la mieux en tout cas merci je vais m'inspirer de ça pour lire/écrire le format de fichier de géométrie dynamique qui va avec (lol je me coucherais mois bête ce soir ^^)
Répondre