[Résolu] lecture d'un fichier txt - le manipuler - l'importer
Utilisateur WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: lecture d'un fichier txt - le manipuler - l'importer
Animateur WDF
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
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: lecture d'un fichier txt - le manipuler - l'importer
Utilisateur WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: lecture d'un fichier txt - le manipuler - l'importer
Utilisateur WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: lecture d'un fichier txt - le manipuler - l'importer
Utilisateur WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: lecture d'un fichier txt - le manipuler - l'importer
Animateur WDF
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
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: lecture d'un fichier txt - le manipuler - l'importer
Utilisateur WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: lecture d'un fichier txt - le manipuler - l'importer
Animateur WDF
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
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: lecture d'un fichier txt - le manipuler - l'importer
Utilisateur WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: lecture d'un fichier txt - le manipuler - l'importer
Animateur WDF
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
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: lecture d'un fichier txt - le manipuler - l'importer
Utilisateur WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: lecture d'un fichier txt - le manipuler - l'importer
Animateur WDF
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
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: lecture d'un fichier txt - le manipuler - l'importer
Utilisateur WDF
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
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


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.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2