[RESOLU]problème avec FileSeek

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
pierre003
Messages : 60
Inscription : ven. 27/mai/2016 8:27
Localisation : 03

[RESOLU]problème avec FileSeek

Message par pierre003 »

Bonjour, c’est encore moi.
Pour l’instant j’ai récupéré les données qui m’intéressent de la base GedCom et crée un fichier avec un enregistrement fixe de 200 pour chaque personne, ça a l’air d’être bon pour l’extraction des données aussi mais j’ai un problème avec FileSeek.
Jusqu’au 4 ème enregistrement ça marche super, mais ensuite il y a un décalage.
J’ai vérifié la position du début du 5 ème il est à 1000 et FileSeek(1,a.q) a.q=1000 mais il y a un décalage de -2 et ce n’est pas linéaire.
J’ai tenté de changer le type de variables mais c’est la même chose.
La fin de chaque fiche c’est des « *** » (du nom au dernier * c’est normalement 200 caractères).
Voila le fichier et le programme pour les enregistrements de 1 a 4 c’est ok, mais ensuite il y a un décalage de -2 pour le 5ème, - 3 pour le 7ème …
J’ai peut être pas tout compris a la manœuvre mais ça me chauffe quand même la tête.
Ligne 6 pour changer de N° d'enregistrement.
1 la base
2 le programme (avec pleins de Debug pour tenter de trouver la faille) :oops: :roll:
Merci a tous (j'ai encore dû me planter quelque part)

Code : Tout sélectionner

HERBELIN,Honore-Pierre-Alexandre,M,2,0,24 FEB 1835,Saint-Maixent,72320,Sarthe,Pays de la Loire,FRANCE,,22 FEB 1895,Saint-Maixent,72320,Sarthe,Pays de la Loire,FRANCE,**********************************DEBRAY,Louise-Victoire,F,2,0,4 APR 1838,Nogent-le-Bernard,72110,Sarthe,Pays de la Loire,FRANCE,,21 JUN 1918,Saint-Maixent,72320,Sarthe,Pays de la Loire,FRANCE,*****************************************HERBELIN,Pierre,M,3,0,25 JUN 1793,Saint-Maixent,72320,Sarthe,Pays de la Loire,FRANCE,,16 MAR 1869,Saint-Maixent,72320,Sarthe,Pays de la Loire,FRANCE,***************************************************RIGAULT,Marie-Louise,F,3,0,1794,Vibraye,72320,Sarthe,Pays de la Loire,FRANCE,,10 JUN 1862,Saint-Maixent,72320,Sarthe,Pays de la Loire,FRANCE,***********************************************************DEBRAY OU DEBRÉ,Charles Noel,M,5,0,25 DEC 1805,Gréez-sur-Roc,72320,Sarthe,Pays de la Loire,FRANCE,,,****************************************************************************************************ROUSSEAU,Marie Louise,F,5,0,3 MAY 1804,Cormes,72400,Sarthe,Pays de la Loire,FRANCE,,13 JAN 1858,Sceaux-sur-Huisne,72160,Sarthe,Pays de la Loire,FRANCE,*************************************************HERBELIN,Jean,M,7,0,20 SEP 1744,Jauzé,72110,Sarthe,Pays de la Loire,FRANCE,,22 JAN 1809,Saint-Maixent,72320,Sarthe,Pays de la Loire,FRANCE,*************************************************************BARRÉ,Louise,F,7,0,1757,,19 DEC 1803,Saint-Maixent,72320,Sarthe,Pays de la Loire,FRANCE,****************************************************************************************************************RIGAULT,Maurice Nicolas,M,9,0,26 AUG 1762,Vibraye,72320,Sarthe,Pays de la Loire,FRANCE,,,***************************************************************************************************************

Code : Tout sélectionner

EnableExplicit
Define long.l
Define Person.s, aa.s, i.l, rect.i
Define No.q
Define a.q
No=4  ;N° d'enregistrement

a=No*200
OpenFile(1,"D:\purebasic\recup gedcom\Base.TXT")
FileSeek(1,a);   position de départ 
Debug "Position de FileSeek : " + Str(Loc(1))   
Debug " "
Person=ReadString(1, #PB_UTF8    ,200)
CloseFile(1)
long=Len(Person)
For i= 1 To long
  If Mid(Person,i,1)<>","
      aa+Mid(Person,i,1)
  Else
      Debug aa
      aa=""
   EndIf
Next
Debug "N° d'enregistrement  : "+No 
Debug " Fileseek  :"+a  
Dernière modification par pierre003 le jeu. 02/août/2018 7:21, modifié 1 fois.
Toshiba satellite Windows 7 64bits
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Re: problème avec FileSeek

Message par Ulix »

Salut Pierre003 !

Pourquoi vouloir utilisé Fileseek ?

Sans ça marche très bien !

Code : Tout sélectionner


EnableExplicit


Enumeration 
#Fichier
EndEnumeration


Define long.l
Define Person.s, aa.s, i.l, rect.i
Define No.q
Define a.q


Define R$

;	Pourquoi utilisé Fileseek ??   :oops: 


;	Attention : je suis sous linux choisir le bon OpenFile

;If OpenFile(1,"D:\purebasic\recup gedcom\Base.TXT")
If OpenFile(#Fichier,".../Bureau/Base.TXT")	 ; Si le fichier peut être lu , on continue...

While Eof(#Fichier) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File') 
R$ = ReadString(#Fichier, #PB_UTF8, 200)	: 	Debug R$      ; Affiche une ligne de 200 caractéres


		;	Découpe la ligne et mise en variables (chaine liste avec structure) ???
		Debug "Nom : " + StringField(R$, 1, ",")
		Debug "Prénom : " + StringField(R$, 2, ",")
		Debug "Sexe : " + StringField(R$, 3, ",")
		;  Etc .....
		


Wend
CloseFile(#Fichier)               ; Ferme le fichier précédemment ouvert

Else 	;	Problème de fichier

EndIf


A+ :P
Ulix
El Papounet
Messages : 57
Inscription : mer. 09/juin/2010 23:47

Re: problème avec FileSeek

Message par El Papounet »

Le décalage observé est dû au fait que ton fichier "Base.TXT" est au format UTF8.

Dans ce format certains caractères comme les caractères accentués sont codés sur 2 octets alors que les autres ne le sont que sur 1 seul.

Passe ton fichier texte en ASCII ou en Unicode en utilisant respectivement #PB_ASCII ou #PB_UNICODE pour l'instruction ReadString.
pierre003
Messages : 60
Inscription : ven. 27/mai/2016 8:27
Localisation : 03

Re: problème avec FileSeek

Message par pierre003 »

[quote="Ulix"]Salut Pierre003 !
Pourquoi vouloir utilisé Fileseek ?
Sans ça marche très bien !

Bonsoir Ulix,
Si j’ai bien compris on lit tout le fichier, c’est justement ce que je ne veux pas faire car ici j’ai coupé le fichier pour les tests mais sinon il est bien plus lourd.
Et lorsqu’il sera utilisé il faudra qu’il sorte 40 ou 60 noms (pour un mariage c’est 2 fois ça) qui seront en n’importe quel endroit du fichier. (Dans certaines communes on pourrait utiliser la règle des 20-80 pour les connaisseurs ; 20% des noms correspondent 80% des personnes de cette commune).
Et je pensais faire un index qui pourra justement pointer sur le début de l’enregistrement pour récupérer les 200 caractères.
El Papounet m’a donné la combine et ça marche nickel.
A+ Pierre
Toshiba satellite Windows 7 64bits
pierre003
Messages : 60
Inscription : ven. 27/mai/2016 8:27
Localisation : 03

Re: problème avec FileSeek

Message par pierre003 »

El Papounet a écrit :Le décalage observé est dû au fait que ton fichier "Base.TXT" est au format UTF8.

Dans ce format certains caractères comme les caractères accentués sont codés sur 2 octets alors que les autres ne le sont que sur 1 seul.

Passe ton fichier texte en ASCII ou en Unicode en utilisant respectivement #PB_ASCII ou #PB_UNICODE pour l'instruction ReadString.
Bonsoir El Papounet
Ça marche nickel, avec #PB_ASCII, mais pas avec #PB_UNICODE
Avec un fichier de 2800 personnes c’est 3-4 secondes pour le créer depuis GedCom(de 1080ko) et un accès instantané pour lire une fiche.
Merci beaucoup et bonne soirée
Pierre
Toshiba satellite Windows 7 64bits
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: problème avec FileSeek

Message par Ar-S »

Intéresse toi à SQlite pour ce genre de chose, c'est fait pour ça !
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
pierre003
Messages : 60
Inscription : ven. 27/mai/2016 8:27
Localisation : 03

Re: problème avec FileSeek

Message par pierre003 »

Ar-S a écrit :Intéresse toi à SQlite pour ce genre de chose, c'est fait pour ça !
Bonjour,
SQlite doit surement être intéressant, mais avec mon âge pour me mettre des nouvelles choses dans la tête…
Je viens de tester la recherche et l’affichage.

TempsDepart.q = ElapsedMilliseconds()
lecture/affichage des 64 personnes trouvées/2850
Debug ElapsedMilliseconds()-TempsDepart me donne 33 (millisecondes ?)

Je ne suis pas sûr de la formule pour trouver le temps de traitement, mais c’est instantané.
Donc pas nécessaire de me torturer le cerveau, et comme je vais rajouter d’autres infos sur chaque personne, le temps ne devrait pas changer (un peu comme ce bon vieux fichier a accès direct que j’adorais quand je bossais :wink: ).
Je vous souhaite à toutes et a tous un bon WE.
Pierre
PS : comme le projet n’est pas près d’être terminé, je reviendrais surement encore vous ennuyer avec mes questions :oops: .
Toshiba satellite Windows 7 64bits
Avatar de l’utilisateur
Ar-S
Messages : 9472
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: problème avec FileSeek

Message par Ar-S »

120, 200 noms.. c'est rien pour un soft :mrgreen: Il pourrait le gérer même en liste avec fichier prefs que tu charges au démarrage.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre