28/03/2024
Windev et les Api WindowsNb de visiteurs en ligne : 1
>> Introduction << >> Codes et Forum << >> Download <<


Rubrique : 3 - HyperFile       Sujet : création d'un fichier externe en HyperFile
Auteur Message
 phanou44 Posté le : 12/12/2005 21:50:42


Bonjour à tous,

Je dispose d'un fichier original.txt et il me faudrait fabriquer un fichier destination.txt quicomprend les lignes du premier fichier mais en partant de la fin pour revenir au début.

Pour parcourir un fichier externe du début jusqu'à la fin (EOT), la fonction fLitLigne fonctionne très bien, mais il n'existe pas de fonction fLitPrécédent pour retrouver le début (BOTqui n'existe pas non plus) , j'ai cru comprendre qu'il fallait que je crée un fichier indexé ? de type HyperFile ?

Comment fait-on cela ?

une remarque: je pensais utiliser Excel pour faire l'inversion, mais le fichier comprend plus million de lignes, c'est donc raté.

Merci pour votre aide,

Amitiés !

Phanou44

 phanou44 Posté le : 13/12/2005 13:39:09


Ce que j'aimerais, c'est un début de code pour le fond et la forme, la documentation en ligne de WinDev me permettra de finaliser.


mon fichier s'appelle : data.txt,
voici un extrait :

11/18/2005,17:32:24,ask,81.5,744.00
11/18/2005,17:32:17,ask,81.5,1091.00
11/18/2005,17:32:08,ask,81.5,744.00
11/18/2005,17:32:00,ask,81.5,1118.00
11/18/2005,17:30:29,ask,81.5,744.00
11/18/2005,17:30:29,cours,81.5,1197.00
11/18/2005,17:30:07,ask,81.5,1941.00
11/18/2005,17:30:07,bid,81.45,4065.00
11/18/2005,17:30:07,cours,81.5,1.00

Il comporte quelques millions de lignes, et je voudrais inverser l'ordre des lignes pour retrouver une date croissante, (la première devient la dernière et la dernière devient la première), je ne peux pas faire cela avec Excel.

J'ai compris que la fonction fLitLigne parcourait le fichier du début à la fin, or je voudrais fabriquer le fichier résultat du tri "résultat.txt" par exemple et concerver l'original.

J'ai compris aussi qu'il fallait fabriquer un fichier indexé HyperFile car les fonctions PasEnDehors et HLitPrécédent me feront mon tri.

Maintenant je démarre à 0, pouvez-vous me donner les lignes de codes pour la déclaration, la fabrication d'un fichier temporaire indexé , le "tant que" pour le tri, et la fabrication d'un fichier texte pour le résultat final.

Merci par avance,

Phanou44,

 MC Posté le : 14/12/2005 08:16:39


HDecritFichier
HdecritRubrique
HdecritCle
etc

 phanou44 Posté le : 14/12/2005 21:54:23


Merci Mc pour ton aide, pourrais-je avoir un début de syntaxe ?

Ce qu'il faudrait arriver à faire, c'est créer un fichier temporaire HyperFile avec comme premier champ un numéro chronologique puis comme deuxième champ la chaine de caractère complète du fichier original, c'est tout ! Après je saurais me déplacer dedans et fabriquer le fichier externe de destination .txt.

merci par avance.

 phanou44 Posté le : 15/12/2005 11:13:28


enfin !!

d'abord création du fichier temporaire, à ne lancer qu'une seule fois , car je n'ai pas trouvé de fonction pour supprimer un fichier, bizarre :

TableDesc est une description de fichier
ItemDesc est une description de rubrique

// description du fichier "Tampon"
TableDesc..Nom = "Tampon"
TableDesc..Type = hFichierNormal

// description de la rubrique "DATA"
ItemDesc..Nom = "DATA"
ItemDesc..Type = hRubTexte
ItemDesc..Taille = 100
HDécritRubrique( TableDesc, ItemDesc )

// valide la description du fichier
HDécritFichier(TableDesc)

// crée le fichier Tampon
HChangeRep(Tampon,"C:\")
HCréation(Tampon)


puis,

première boucle : lecture du fichier Original, écriture dans le fichier tampon
deuxième boucle : positionnement à la fin du fichier tampon pour lecture et écriture dans le fichier destination, et on remonte jusqu'au début du fichier tampon, voilà :

nomORI est une chaine // nom du fichier à splitter
fichierORI est un entier // handle du fichier à splitter
bufferORI est une chaîne // buffer de lecture / écriture
nomRes est une chaine // nom du fichier corrigé
fichierRes est un entier // handle du fichier corrigé
bufferRes est une chaîne // buffer de lecture / écriture
compteur est un entier // compteur

// crée le fichier Tampon
HChangeRep(Tampon,"C:\")
HCréation(Tampon)

nomORI=fSélecteur("C:\","","Sélectionner un fichier","*.txt"+RC+"*.*","txt",fselOuvre+fselExiste)
fichierORI = fOuvre(nomORI,foLecture)

nomRes="C:\Destination\"+Droite(nomORI,taille(nomORI)-3)
fichierRes = fOuvre(nomRes,foCreation)

trace("Vérifier la présence du dossier C:\Destination\")
trace("Début du traitement-patientez")
compteur=0
bufferORI=fLitLigne(fichierORI)

// boucle de traitement du fichier à corriger
tantque bufferORI <> EOT
  bufferRes=bufferORI
  Tampon.DATA=bufferReS
  HAjoute(Tampon)
  bufferORI=fLitLigne(fichierORI)
  compteur=compteur+1
fin


// boucle de recopie du fichier tampon vers le fichier externe en ordre inversé
HDernier(Tampon)
TANTQUE PAS HEnDehors
   bufferRes=Tampon.DATA
   fEcritLigne(fichierRes,bufferRes)
   HLitPrécédent(Tampon)
fin

trace("Fin du traitement-Consultez le dossier C:\Destination\")
trace("Nombre de lignes traitées : ",compteur)
fFerme(fichierORI)
fFerme(fichierRes)
Hferme(Tampon)

Merci pour votre aide !!


 MC Posté le : 16/12/2005 07:43:38


Suppression :

HFerme("FIC_TEMP")

HAnnuleDéclaration("FIC_TEMP" )
fSupprime(L_S_RepTemp + "FIC_TEMP"  + ".FIC")
fSupprime(L_S_RepTemp + "FIC_TEMP"  + ".NDX")

>> Poster un message dans un NOUVEAU sujet.
>> Poster un message dans ce sujet.