OVH Cloud OVH Cloud

structure en accés direct

23 réponses
Avatar
TouTi
Bonjour

est-il possible de retrouver la structure des enregistrements (au moins les
types de données et la longueur ) à partir d'un fichier écrit en mode
aléatoire (accés direct) quelconque???? peut être un prog déjà existant???

CAD à partir d'un fichier .dat quelconque, retrouver la structure du style :
Nom as string * 20
Prénom as String * 15
Age as Integer
Adresse as string * 80

Merci

Guy
--

10 réponses

1 2 3
Avatar
Aski
Salutatoi Fred,

Tu as donc déclaré :

Dans le message:,
Aski écrit:

Pas seulement tu peux aussi avoir des champs de longueur fixe.



Oui, mais sans séparateur, je ne vois pas comment Excel fait pour les
découper, à moins que tu ne le fasses toi-même au cours de
l'importation.



Bonjour,
Il s'agit de champs de longueur fixe, mais toujours de type texte.
Dans ce cas, il y a souvant des espaces de remplissage qui aident
Excel à deviner où couper.
J'imagine qu'il peut aussi y avoir des algorithmes de reconnaissance
de motifs (?)
Excel fait une proposition de découpage. L'utilisateur tranche.



OK. Merci Fred.
Je pense quand même (je suis têtu) que si les premiers champs ont été
saturés sans être nettoyés, la reconnaissance est plus difficile.
Néanmoins, Excel peut effectivement aider à faire une première analyse dans
le cas où les textes sont significatifs.
--
Cordialement

Aski

AntiSpamEdit - Version 1.6.4 du 12/08/05
Aide de K9 en français
http://h.charlier.de.chily.perso.cegetel.net/
ou
http://h.dechily.free.fr/
Avatar
Jacques93
Bonjour à tous,
Aski a écrit :
Salutatoi Fred,

Tu as donc déclaré :


Dans le message:,
Aski écrit:


Pas seulement tu peux aussi avoir des champs de longueur fixe.



Oui, mais sans séparateur, je ne vois pas comment Excel fait pour les
découper, à moins que tu ne le fasses toi-même au cours de
l'importation.



Bonjour,
Il s'agit de champs de longueur fixe, mais toujours de type texte.
Dans ce cas, il y a souvant des espaces de remplissage qui aident
Excel à deviner où couper.
J'imagine qu'il peut aussi y avoir des algorithmes de reconnaissance
de motifs (?)
Excel fait une proposition de découpage. L'utilisateur tranche.




OK. Merci Fred.
Je pense quand même (je suis têtu) que si les premiers champs ont été
saturés sans être nettoyés, la reconnaissance est plus difficile.
Néanmoins, Excel peut effectivement aider à faire une première analyse dans
le cas où les textes sont significatifs.



Je conseillerais plutôt Access pour ce genre de démarche. Bien que le
découpage proposé par défaut soit le même (des espaces) Access permet
d'enregistrer les personnalisations que l'utilisateur indique :
découpage différent, type de champs (date, numérique...) ce qui permet
d'avancer petit à petit. A ma connaissance avec Excel, il faut à chaque
fois repartir du découpage par défaut, mais j'ai peut être loupé quelque
chose.
--
Cordialement,

Jacques.
Avatar
Patrice Henrio
"Jacques93" a écrit dans le message de news:
%23inTh%
Bonjour à tous,
Aski a écrit :
Salutatoi Fred,

Tu as donc déclaré :


Dans le message:,
Aski écrit:


Pas seulement tu peux aussi avoir des champs de longueur fixe.



Oui, mais sans séparateur, je ne vois pas comment Excel fait pour les
découper, à moins que tu ne le fasses toi-même au cours de
l'importation.



Bonjour,
Il s'agit de champs de longueur fixe, mais toujours de type texte.
Dans ce cas, il y a souvant des espaces de remplissage qui aident
Excel à deviner où couper.
J'imagine qu'il peut aussi y avoir des algorithmes de reconnaissance
de motifs (?)
Excel fait une proposition de découpage. L'utilisateur tranche.




OK. Merci Fred.
Je pense quand même (je suis têtu) que si les premiers champs ont été
saturés sans être nettoyés, la reconnaissance est plus difficile.
Néanmoins, Excel peut effectivement aider à faire une première analyse
dans le cas où les textes sont significatifs.



Je conseillerais plutôt Access pour ce genre de démarche. Bien que le
découpage proposé par défaut soit le même (des espaces) Access permet
d'enregistrer les personnalisations que l'utilisateur indique : découpage
différent, type de champs (date, numérique...) ce qui permet d'avancer
petit à petit. A ma connaissance avec Excel, il faut à chaque fois
repartir du découpage par défaut, mais j'ai peut être loupé quelque chose.
--
Cordialement,

Jacques.



En fait effectivement on ne pourra trouver mieux que du texte donc méthode
inutilisable en général.


Par contre si le fichier dont on ne connait pas la teneur est en lecture
écriture, c'est àdire que l'on peut rajouter un enregistrement, on peut
facilement trouver la longueur d'un enregistrement
Longueur du fichier au départ (L1)
Ajout d'un enregistrement
Longueur du nouveau fichier (L2)
Longueur d'un enregistrement = L2-L1
Ensuite le découpage se fera en vérifiant s'il y a des chaînes de caractères
de longueurs fixes puis le plus difficile sera de trouver le type de ce qui
n'est pas des chaînes de caractères. Autant dire "mission impossible".
Avatar
Aski
Salutatoi Patrice,

Tu as donc déclaré :

En fait effectivement on ne pourra trouver mieux que du texte donc
méthode inutilisable en général.


Par contre si le fichier dont on ne connait pas la teneur est en
lecture écriture, c'est àdire que l'on peut rajouter un
enregistrement, on peut facilement trouver la longueur d'un
enregistrement Longueur du fichier au départ (L1)
Ajout d'un enregistrement
Longueur du nouveau fichier (L2)



Mais, comment détermines-tu L2 ?

Aski
Avatar
Patrice Henrio
"Aski" a écrit dans le message de news:
%
Salutatoi Patrice,

Tu as donc déclaré :

En fait effectivement on ne pourra trouver mieux que du texte donc
méthode inutilisable en général.


Par contre si le fichier dont on ne connait pas la teneur est en
lecture écriture, c'est àdire que l'on peut rajouter un
enregistrement, on peut facilement trouver la longueur d'un
enregistrement Longueur du fichier au départ (L1)
Ajout d'un enregistrement
Longueur du nouveau fichier (L2)



Mais, comment détermines-tu L2 ?

Aski




Par Lof(<numéro du canal ouvert>)

Open <nom du fichier> For Binary As #1
L1=Lof(1)
AjoutUneDonnée
Close #1
Open <nom du fichier> For Binary As #1
L2=Lof(1)
Close #1
LongueurDonnée=L2-L1

Je lis cette info deux fois : une fois avant et une fois après l'écriture
d'un enregistrement.
Je précise que cela ne marche que si le logiciel utilisant le fichier
binaire permet aussi l'ajout de données., sinon bien sûr ...
Avatar
Aski
Salutatoi Patrice Henrio,

Tu as donc déclaré :

Par Lof(<numéro du canal ouvert>)

Open <nom du fichier> For Binary As #1
L1=Lof(1)
AjoutUneDonnée
Close #1
Open <nom du fichier> For Binary As #1
L2=Lof(1)
Close #1
LongueurDonnée=L2-L1

Je lis cette info deux fois : une fois avant et une fois après
l'écriture d'un enregistrement.
Je précise que cela ne marche que si le logiciel utilisant le fichier
binaire permet aussi l'ajout de données., sinon bien sûr ...



Mes neurones doivent se ramollir car je ne comprends pas :
AjoutUneDonnee correspond à l'ajout d'un enregistrement. On connait donc sa
longueur sans avoir à la calculer après enregistrement.
Je ne vois donc pas comment cette méthode renseigne sur la structure.

Cordialement

Aski
Avatar
Patrice Henrio
Non je pensais que ce fameux fichier de données dépend d'une application que
l'auteur du message initial détient. Que de plus cette application permet
d'ajouter des enregistrements (ce qui n'a rien d'obligatoire).
Donc en fait sans même utiliser LOF(1), un clic droit sur le fichier doit
donner sa taille exacte en octets.
Quand j'écris "ajout d'une donnée", il s'agit en fait d'un ajout par
l'application générant le fichier de données.
Application dont l'auteur n'a visiblement pas les sources car sinon la
question ne serait pas posée.

Mais je crois qu'en fait son problème n'a pas de solution simple et rapide.

"Aski" a écrit dans le message de news:

Salutatoi Patrice Henrio,

Tu as donc déclaré :

Par Lof(<numéro du canal ouvert>)

Open <nom du fichier> For Binary As #1
L1=Lof(1)
AjoutUneDonnée
Close #1
Open <nom du fichier> For Binary As #1
L2=Lof(1)
Close #1
LongueurDonnée=L2-L1

Je lis cette info deux fois : une fois avant et une fois après
l'écriture d'un enregistrement.
Je précise que cela ne marche que si le logiciel utilisant le fichier
binaire permet aussi l'ajout de données., sinon bien sûr ...



Mes neurones doivent se ramollir car je ne comprends pas :
AjoutUneDonnee correspond à l'ajout d'un enregistrement. On connait donc
sa longueur sans avoir à la calculer après enregistrement.
Je ne vois donc pas comment cette méthode renseigne sur la structure.

Cordialement

Aski




Avatar
Aski
Salutatoi Patrice Henrio,

Tu as donc déclaré :

Non je pensais que ce fameux fichier de données dépend d'une
application que l'auteur du message initial détient. Que de plus
cette application permet d'ajouter des enregistrements (ce qui n'a
rien d'obligatoire). Donc en fait sans même utiliser LOF(1), un clic droit
sur le fichier
doit donner sa taille exacte en octets.
Quand j'écris "ajout d'une donnée", il s'agit en fait d'un ajout par
l'application générant le fichier de données.
Application dont l'auteur n'a visiblement pas les sources car sinon la
question ne serait pas posée.

Mais je crois qu'en fait son problème n'a pas de solution simple et
rapide.



Tu me rassures ... sur mon activité cérébrale.
Il semble de toute façon que TouTi n'est pas intéressé par notre recherche.
lol

Aski
Avatar
TouTi
> Tu me rassures ... sur mon activité cérébrale.
Il semble de toute façon que TouTi n'est pas intéressé par notre


recherche.
lol



Du tout, je sens bien que cela ne va pas être aussi simple que je l'espèrais
et vous remercie pour vos efforts cérébraux... j'ai simplement abandonné
pour l'instant ce sujet pour me penchait sur d'autres choses prioritaires.
Je souhaitais soulager les utilisateurs de tâches pénibles.

J'ai par ailleurs essayé d'analyser des fichiers produits par une
application dont je dispose le code et pu remarquer qu'il est très dur de
s'y retrouver. Il suffit que deux champs concécutifs soient de même type
pour qu'il soit impossible de les différencier. Je pense par exemple pour
les champs de type "Variant".

Mercizavous

TouTi
Avatar
Aski
Salutatoi TouTi,

Tu as donc déclaré :

Tu me rassures ... sur mon activité cérébrale.
Il semble de toute façon que TouTi n'est pas intéressé par notre
recherche. lol



Du tout, je sens bien que cela ne va pas être aussi simple que je
l'espèrais et vous remercie pour vos efforts cérébraux... j'ai
simplement abandonné pour l'instant ce sujet pour me penchait sur
d'autres choses prioritaires. Je souhaitais soulager les utilisateurs
de tâches pénibles.

J'ai par ailleurs essayé d'analyser des fichiers produits par une
application dont je dispose le code et pu remarquer qu'il est très
dur de s'y retrouver. Il suffit que deux champs concécutifs soient de
même type pour qu'il soit impossible de les différencier. Je pense
par exemple pour les champs de type "Variant".



Je ne vois pas comment, dans un fichier ADR, une variable ou un champ
pourrait être de type Variant puisque ce type n'a pas une longueur fixe.
Je pense plutôt à des String*L qui pourraient d'ailleurs être utilisés pour
toutes les variables en convertissant ensuite par des fonctions telles que
CLng(). Il reste bien entendu à trouver les L.

Cordialement

Aski
1 2 3