|
[Résolu] lecture d'un fichier txt - le manipuler - l'importer |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 30/10/2007 10:44
Post(s): 88
|
Bonjour, Pourriez-vous éventuellement m'aider à traduire ce code VBscript :
Set oFichier = FSO.OpenTextFile(stRep & stFichierSource, ForReading, True)
if not oFichier.AtEndofStream then st = oFichier.ReadAll
if st = "" Then wscript.quit
oFichier.Close
tbLg = Split(st, Chr(10))
For i = 0 To UBound(tbLg) 'parcours les lignes
tb = Split(tbLg(i), Chr(&H1C))
If (UBound(tb) >= 2) Then
stLigne1 = stLigne1 & tb(0) & vbTab
stLigne2 = stLigne2 & tb(2) & vbTab
End If
Next
Set oFichier = FSO.OpenTextFile(stRep2 & stFichierDest, ForWriting, True)
oFichier.WriteLine(stLigne1)
oFichier.WriteLine(stLigne2)
oFichier.Close
Le but de ce code:- Lire un fichier .log qui se trouve dans un répertoire défini. (ne vous souciez pas de ce répertoire de du nom du fichier pour l'instant). - le convertir dans le format suivant: 101 102 103 donné x donné Y donné Z maintenant le fichier est comme ceci : 101 donné x 102 donné y etc... avec un certain délimiteur J'ai mis un exemple de fichier sur Fichier ZIP avec LOG et TXT- sauvegarder ces modifications dans un fichier .txt La partie peut-être la plus difficile est en fait d'importer ce fichier modifié. J'ai une table qui contient tous ces rubriques : R101 / R102 / etc... Comment doit-on procéder ? Bien à vous
Contribution le : 30/10/2007 11:15
Edité par drcharly93 sur 2/11/2007 14:53:26
|
|
|
Re: lecture d'un fichier txt - le manipuler - l'importer |
|
Animateur WDF ![](http://old.wdforge.org/uploads/rank3f7d78368d45f.gif)
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
bonjour,
PROCEDURE Transforme( sFichierSource, sFichierResultat)
sFichierSource est une chaîne
sUnElement est une chaîne
stLigne1 est une chaîne
stLigne2 est une chaîne
sFichierSource = fChargeTexte("\\mnkdevcdr\d$\Temp\1771711\1771711.log")
SI Taille(sFichierSource) = 0 ALORS RETOUR
POUR TOUTE CHAINE sUnElement DE sFichierSource SEPAREE PAR Caract(10)
SI ChaîneOccurrence( sUnElement, Caract( 28 ) ) > 0 ALORS
stLigne1 += ExtraitChaîne( sUnElement, 1, Caract(28) ) + TAB
stLigne2 += ExtraitChaîne( sUnElement, 3, Caract(28) ) + TAB
FIN
FIN
fSauveTexte( sFichierResultat, stLigne1 + RC + stLigne2 )
Contribution le : 30/10/2007 14:45
|
|
|
Re: lecture d'un fichier txt - le manipuler - l'importer |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 30/10/2007 10:44
Post(s): 88
|
Merci énormément. Je vais essayer de le tester encore ce soir.
Par contre pour importer les données transformées dans un de mes fichier. Comment procèderai-je le mieux ?
Mes rubriques ont comme noms : R101 / R102 etc... Les colonnes dans le fichier changé : 101 / 102 / etc...
BAV
Contribution le : 30/10/2007 18:07
|
|
|
Re: lecture d'un fichier txt - le manipuler - l'importer |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 30/10/2007 10:44
Post(s): 88
|
Super ton code fonctionne à merveille !!
Maintenant encore la partie importation :)
A+
Contribution le : 30/10/2007 20:10
|
|
|
Re: lecture d'un fichier txt - le manipuler - l'importer |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 30/10/2007 10:44
Post(s): 88
|
Est-ce que tu sais encore modifier une petite chose ? Mon fichier HF a comme rubriques R101 / R102 etc... Dans le txt que tu as recomposé, tu pourrais ajouter au colonnes 101/102 etc le "R" pour que cela devienne comme le fichier HF ? Cela facilitera l'importation, non ? J'ai trouvé ceci dans l'aide : Citation : SI HImporteTexte("CLIENT","C:\UnExemple\Client.txt",... "NOM,ADRESSE,LOGO", hValDefaut, "Jauge1") = Faux ALORS Erreur("Importation impossible") SINON // Traitement FIN
<Liste des rubriques> : Chaîne de caractères (avec guillemets)
Liste des noms des rubriques du fichier texte. Les noms peuvent être délimités par des simples quotes et sont séparés par des virgules ou RC. Les noms des rubriques de type clé composées sont ignorées. Si ce paramètre n'est pas précisé ou correspond à une chaîne vide, toutes les rubriques sont importées (sauf les clés composées) dans l'ordre physique de description.
Si mes rubriques dans le txt ne sont pas dans le même ordre que les rubriques dans le HF, est-ce qu'il vont se concorder ? Est-ce que R101 correspondra toujours avec R101 ? Pour info j'ai comme cela 450 rubriques dans un fichier HF. Donc l'importation ne peut pas se planter :) Autre chôse si 101=A 102= vide 103=B ... Est-ce que l'importation ce fera toujours correctement ? 101=101 / 102=102=vide / 103=103 ? BAV
Contribution le : 30/10/2007 21:10
|
|
|
Re: lecture d'un fichier txt - le manipuler - l'importer |
|
Animateur WDF ![](http://old.wdforge.org/uploads/rank3f7d78368d45f.gif)
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour,
PROCEDURE Transforme( sFichierSource, sFichierResultat)
sFichierSource est une chaîne
sUnElement est une chaîne
stLigne1 est une chaîne
stLigne2 est une chaîne
//Chargement du fichier source
sFichierSource = fChargeTexte(sFichierSource)
//Si fichier vide alors on sort
SI Taille(sFichierSource) = 0 ALORS RETOUR
//On parcours tous les chaines se sFichierSource
//Qui se trouvent entre deux Carat(10)
POUR TOUTE CHAINE sUnElement DE sFichierSource SEPAREE PAR Caract(10)
//Si dans la chaine sUnElement on treouve au moins
// un Caract(28) alors on récupère les valeurs
SI ChaîneOccurrence( sUnElement, Caract( 28 ) ) > 0 ALORS
//stLigne1 contient les noms des rubrique
//Que l'on fait précéder d'un "R"
stLigne1 += "R" + ExtraitChaîne( sUnElement, 1, Caract(28) ) + TAB
//stLigne2 contients les valeurs séparés par des tabulations
stLigne2 += ExtraitChaîne( sUnElement, 3, Caract(28) ) + TAB
FIN
FIN
//On Sauvegarde le résultat
fSauveTexte( sFichierResultat, stLigne1 + RC + stLigne2 )
Pour l'importation du fichier vous pouvez de la même manière créer la syntaxe.
sRubrique est une chaine
//Mon fichier est à remplacer par le nom de votre fichier
sFichierHF est une chaine = MonFichier
//stLigne1 contient la liste des rubrique séparée par des TAB
//On va remplacer les TAB par des ','
sRubriques = Remplace(stLigne1, TAB, ",")
Si Pas HImporteTexte( sFichier, sFichierResultat, sRubriques, hImpIgnoreRubriqueVide+hImpNormal+hValDéfaut+hImpSansDélimiteur) ALORS
Erreur(HErreur())
RETOUR
FIN
Pour les options renseignées voir l'aide en ligne de la fonction HImporteTexte() du WLangage.
Contribution le : 31/10/2007 11:09
|
|
|
Re: lecture d'un fichier txt - le manipuler - l'importer |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 30/10/2007 10:44
Post(s): 88
|
Super merci pour cette aide précieuse !! Cependant il y a deux petites erreurs :
Rubrique est une chaîne
//Mon fichier est à remplacer par le nom de votre fichier
sFichierHF est une chaîne = "PMfup"
//stLigne1 contient la liste des rubrique séparée par des TAB
//On va remplacer les TAB par des ','
sRubrique = Remplace(gsLigne1, TAB, ",")
Info (sRubrique)
SI PAS HImporteTexte( sFichierHF, gsFichierResultat, sRubrique, Caract(9),hImpIgnoreRubriqueVide+hImpNormal+hValDéfaut+hImpSansDélimiteur) ALORS
Erreur(HErreur())
RETOUR
FIN
J'ai du rajouter caract(9) comme délimiteur ? Si je ne le fessais pas alors l'importation/synchronisation des rubriques étaient incorrectes ? Deuxième petit truc: Bizarrement les noms des rubriques sont importées aussi ? Du coup je me retrouve avec deux enregistrements. Un avec les noms de rubriques et un avec les valeurs. Pourtant on ne travaille qu'avec LIGNE1 ? Pourrais-tu encore me guider avec la chose suivante : lors de cette importation je voudrais qu'une rubrique particulière ai une valeur particulière. Est-ce possible. Exemple : donc j'importe R101/R102 etc avec leurs valeurs décrits dans le texte, mais une rubrique ID devrait contenir la valeur que j'ai récupéré dans un champ précédemment. BAT et à bientôt
Contribution le : 01/11/2007 21:05
|
|
|
Re: lecture d'un fichier txt - le manipuler - l'importer |
|
Animateur WDF ![](http://old.wdforge.org/uploads/rank3f7d78368d45f.gif)
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour, Citation : J'ai du rajouter caract(9) comme délimiteur ? Etonnant puisque caract(9) = TAB Citation : Pourtant on ne travaille qu'avec LIGNE1 Modifier
fSauveTexte( sFichierResultat, stLigne1 + RC + stLigne2 )
fSauveTexte( sFichierResultat, stLigne2 )
Citation : mais une rubrique ID devrait contenir la valeur que j'ai récupéré dans un champ précédemment. Si le fichier à importer ne contient toujours qu'une seule ligne, tu peut si tu utilise un numéro auto incrémenté dans le fichier te positionner sur le dernier enregistrement et modifier la rubrique voulue
HLitDernier(<MonFichier>,<Cle Unique>)
<MonFichier>.ID = <La valeur voulue>
HModifie(<MonFichier>
Contribution le : 02/11/2007 09:30
|
|
|
Re: lecture d'un fichier txt - le manipuler - l'importer |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 30/10/2007 10:44
Post(s): 88
|
Encore une fois merci pour tes réponses.
La caract(9) me parait en fin de compte logique vue que mes valeurs sont délimités par des TAB. Non ? regarde ligne2
Je jouait aussi avec l'idée de supprimer la ligne1.
Mais pourquoi est elle alors supporté dans la fonction Himportetexte (cfr rubriques)??
Pour le ID c'est plus compliqué : En fait classiquement j'ai un fichier avec des clients. Qui ont chacun leurs ID propre.
L'importation que j'exécute n'est pas avec le dernier ID.
C'est à dire, si je choisit client ID 1, l'import devra contenir,dans la rubrique uniek_FM_ID, = 1 .... si je choisit client ID 33, l'import devra contenir, dans la rubrique uniek_FM_ID, = 33 .... etc...
Donc cela dépend du client que je choisi.
J'ai une liaison basé sur cet ID. Un ID client peut avoir plusieurs importations.
Je pensais peut-être à l'insérer d'emblée dans le fichier txt modifié ? le champ uniek_FM_ID = sai_client_ID..valeuraffiché
Est-ce possible ?
BAT a+
Contribution le : 02/11/2007 09:43
|
|
|
Re: lecture d'un fichier txt - le manipuler - l'importer |
|
Animateur WDF ![](http://old.wdforge.org/uploads/rank3f7d78368d45f.gif)
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Oui bien sûr, en faite la ligne d'entête dans le fichier ne sert à rien pour l'importation puisque tu définis dans la variable sRubriques l'ordre du mappage de tes données à importer.
Tu peux donc très bien rajouter le ID du client à la fin de sLigne2 sans oublier de le faire précéder du séparateur de champs (TAB) puis aussi de la rajouter à la fin du contenu de sRubrique.
Contribution le : 02/11/2007 11:05
|
|
|
Re: lecture d'un fichier txt - le manipuler - l'importer |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 30/10/2007 10:44
Post(s): 88
|
tu pourrais m'aider un chouiat en plus :) le rubrique Runiek_FM_ID se trouve déjà dans le rubriques. Comment je fait alors ? La modification:
PROCEDURE Convertlog()
sFichierSource est une chaîne
sUnElement est une chaîne
stLigne2 est une chaîne
//Info (lettredudisque)
SI Lettredudisque = "" ALORS
Info ("Veuillez réinserer le stick USB")
RETOUR
FIN
sFichierSource = fChargeTexte(Lettredudisque+":/"+PMsn+".log")
Info (sFichierSource)
gsFichierResultat = Lettredudisque+":/"+PMsn+".txt"
Info (gsFichierResultat)
SI Taille(sFichierSource) = 0 ALORS RETOUR
//On parcours tous les chaines de sFichierSource
//Qui se trouvent entre deux Caract(10)
POUR TOUTE CHAINE sUnElement DE sFichierSource SEPAREE PAR Caract(10)
//Si dans la chaine sUnElement on trouve au moins
// un Caract(28) alors on récupère les valeurs
SI ChaîneOccurrence( sUnElement, Caract( 28 ) ) > 0 ALORS
//stLigne1 contient les noms des rubrique
//Que l'on fait précéder d'un "R"
gsLigne1 += "R" + ExtraitChaîne( sUnElement, 1, Caract(28) ) + Caract(44) //TAB
//stLigne2 contients les valeurs séparés par des tabulations
stLigne2 += ExtraitChaîne( sUnElement, 3, Caract(28) ) + TAB
FIN
FIN
fSauveTexte( gsFichierResultat, stLigne2 ) // gsLigne1 + RC +
L'importation:
HImporteTexte( sFichierHF, gsFichierResultat, gsLigne1, Caract(9),hImpIgnoreRubriqueVide+hImpNormal+hValDéfaut+hImpSansDélimiteur)
BAT
Contribution le : 02/11/2007 11:40
|
|
|
Re: lecture d'un fichier txt - le manipuler - l'importer |
|
Animateur WDF ![](http://old.wdforge.org/uploads/rank3f7d78368d45f.gif)
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour,
PROCEDURE Convertlog()
sFichierSource est une chaîne
sUnElement est une chaîne
stLigne2 est une chaîne
//Info (lettredudisque)
SI Lettredudisque = "" ALORS
Info ("Veuillez réinserer le stick USB")
RETOUR
FIN
sFichierSource = fChargeTexte(Lettredudisque+":/"+PMsn+".log")
Info (sFichierSource)
gsFichierResultat = Lettredudisque+":/"+PMsn+".txt"
Info (gsFichierResultat)
SI Taille(sFichierSource) = 0 ALORS RETOUR
//On parcours tous les chaines de sFichierSource
//Qui se trouvent entre deux Caract(10)
POUR TOUTE CHAINE sUnElement DE sFichierSource SEPAREE PAR Caract(10)
//Si dans la chaine sUnElement on trouve au moins
// un Caract(28) alors on récupère les valeurs
SI ChaîneOccurrence( sUnElement, Caract( 28 ) ) > 0 ALORS
//stLigne1 contient les noms des rubrique
//Que l'on fait précéder d'un "R"
gsLigne1 += "R" + ExtraitChaîne( sUnElement, 1, Caract(28) ) + Caract(44) //TAB
//stLigne2 contients les valeurs séparés par des tabulations
stLigne2 += ExtraitChaîne( sUnElement, 3, Caract(28) ) + TAB
FIN
FIN
stLigne1 += "Runiek_FM_ID"
stLigne2 += <Identifiant du client>
fSauveTexte( gsFichierResultat, stLigne2 ) // gsLigne1 + RC +
Contribution le : 02/11/2007 12:01
|
|
|
Re: lecture d'un fichier txt - le manipuler - l'importer |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 30/10/2007 10:44
Post(s): 88
|
Trop cool, cela fonctionne à merveille
Contribution le : 02/11/2007 12:45
Edité par drcharly93 sur 2/11/2007 14:53:43
|
|
Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
|
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
|