IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

2 fichiers - recherche Reference d'un dans l'autre


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2009
    Messages : 129
    Par défaut 2 fichiers - recherche Reference d'un dans l'autre
    Bonjour a tous,

    Je bloque sur un script.

    J'ai 2 fichiers texte qui contiennent des listes formater de la même façon.

    Le premier s'appelle disons "Ecommerce.txt et le deuxième "Tarif.txt

    Le but est de récupérer une référence dans le fichier Ecommerce.txt, de vérifier si elle existe dans le fichier Tarif.txt.
    Si elle existe, supprimer cette ligne du fichier tarif et la mettre dans un autre fichier (que j'appelle "JusteEcom.txt")
    Le tout ligne par ligne

    Voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    FichierEcommerce 	= "1-EcommerceMini.txt"
    FichierTarif 		= "1-TarifMini.txt"
    JusteEcom 			= "JusteEcom.txt"
    TarifSansEcom		= "TarifSansEcom.txt"
     
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    'Ouverture fichier Ecommerce en lecture
    Set objFSO_ECommerce 	= objFSO.OpenTextFile (FichierEcommerce, ForReading, false)
    'Ouverture fichier Tarifs en lecture
    Set objFSO_Tarif 		= objFSO.OpenTextFile (FichierTarif, ForReading, false)
     
    'lecture de chaque ligne
    Do While objFSO_ECommerce.AtEndOfStream=false
    	'pour chaque ligne du fichier Ecommerce 
    	LigneEcommerce = objFSO_ECommerce.ReadLine
    	'on cherche la reference colonne 90 et on recupere les 16 caracteres suivant
    	Ref_ECommerce = Mid(LigneEcommerce, 90, 16)
    	'suppression des espaces
    	Ref_ECommerce = LTrim(Ref_ECommerce)
    	'wscript.echo Ref_ECommerce
    	wscript.echo "ref ecommerce " & Ref_ECommerce
     
    	'Ouverture fichier Tarifs en lecture
    	Set objFSO_Tarif 		= objFSO.OpenTextFile (FichierTarif, ForReading, false)
     
    	'wscript.echo "1 : " & countTarif
    	Do While objFSO_Tarif.AtEndOfStream=false
    		'wscript.echo objFSO_Tarif.ReadLine
    		'pour chaque ligne du fichier Tarif 
    		'on cherche la reference colonne 90 et on recupere les 16 caracteres suivant
    		LigneTarif = ""
    		LigneTarif = objFSO_Tarif.ReadLine
    		Ref_Tarif = Mid(LigneTarif, 90, 16)
    		'suppression des espaces
    		Ref_Tarif = LTrim(Ref_Tarif)
    		'Si Ref_Tarif = Ref_Tarif --> on ecrit pa ligne dans un nouveau fichier tarif
    		'compare les 2 ref --> si egale = 0 alors les 2 ref sont identiques
     
    		'Test les 2 ref
    		egale = StrComp(Ref_Tarif, Ref_ECommerce, 1)
     
    		'Si Les 2 ref sont les memes
    		If (egale=0) Then
    			'wscript.echo "test oui Ref Tarif : " & Ref_Tarif & " Ref Ecommercer : " & Ref_ECommerce
    			'On ecrit la ligne dans le fichier Dif
    			Set objFSO_Dif = objFSO.OpenTextFile(JusteEcom,ForAppending,true)
    			objFSO_Dif.Writeline(LigneTarif)
    			objFSO_Dif.close
    		'sinon
    		Else
    			'Si non, on ecrit la ligne dans le NewFichierTarif
    			Set objFSO_New = objFSO.OpenTextFile(TarifSansEcom,ForAppending,true)
    			objFSO_New.WriteLine(LigneTarif)
    			objFSO_New.close
    		End if
    	Loop
    	objFSO_Tarif.close
    Loop
    objFSO_ECommerce.close
    Sur le principe, je cherche ma reference dans le fichier "Ecommerce.txt", je supprime les espaces et je recherche cette référence dans le fichier "Tarif.txt"
    Si je retrouve cette reference, je copie la ligne du tarif correspondant dans un nouveau fichier JusteEcom.txt et sinon je copie cette ligne dans TarifSansEcom.txt

    Le probleme que je rencontre c'est que cela fonctionne pour la premiere ligne mais pour la ligne suivant, vu qu'elle ne correspond pas à la premiere, elle va se retrouver dans TarifSansEcom alors que la ref correspond à la premiere ligne.

    Auriez vous une idée ?
    Il est tout à fait possible que la méthode ne soit pas bonne ...

    Merci d'avance

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 420
    Par défaut
    Un petit extrait des 2 fichiers(à titre indicatif, mais pas une capture d'écran) serait plus éloquent.

    Si toutes les lignes du fichier "FichierTarif" sont différentes, une fois on a trouvé une valeur, on devrait sortir de la boucle Do While objFSO_Tarif.AtEndOfStream=false.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    pourtant pas compliqué en respectant la Logique !

    Citation Envoyé par djinlemage Voir le message
    Le premier s'appelle disons "Ecommerce.txt et le deuxième "Tarif.txt

    […] et la mettre dans un autre fichier (que j'appelle "JusteEcom.txt") et sinon je copie cette ligne dans TarifSansEcom.txt
    Joindre deux fichiers texte source et les deux fichiers texte des résultats désirés …

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2009
    Messages : 129
    Par défaut
    Bonjour,

    Merci de votre retour.
    En effet avec les fichiers ça serait plus facile
    Désolé !


    Voici donc en PJ les 2 fichiers que j'analyse et le résultat voulu.

    Citation Envoyé par l_autodidacte
    Un petit extrait des 2 fichiers(à titre indicatif, mais pas une capture d'écran) serait plus éloquent.

    Si toutes les lignes du fichier "FichierTarif" sont différentes, une fois on a trouvé une valeur, on devrait sortir de la boucle Do While objFSO_Tarif.AtEndOfStream=false.]
    En effet mais dans le traitement,
    - je vérifie la 1ere référence du 1er fichier (EcommerceMini)
    - dans le 2eme fichier (TarifMini), ligne par ligne je cherche si la reference correspond
    ----------Si oui - Je copie la ligne du fichier TarifMini dans un fichier (JusteEcom)
    ----------Si non- Je copie la ligne du fichier TarifMini dans un fichier (TarifSans Ecom)
    Sorite de la boucle

    MAIS

    comme l'analyse du fichier Ecommerce n'est pas fini j'ai le même traitement sur les ligne suivant.
    Le pb que je rencontre, c'est que par exemple sur l'analyse de la 2ème ligne du fichier Ecommerce, la référence de la première ligne ne correspondant pas, il me la mets dans TarifSansEcom alors qu'elle ne devrait pas...

    J’espère avoir été claire
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    J'ai bien au moins trois voies différentes, j'attends de voir ce que l_autodidacte te propose pour en poster une autre
    mais on aimerait déjà avoir un ordre d'idée du nombre de lignes à traiter …

  6. #6
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Avril 2009
    Messages : 129
    Par défaut
    Salut,

    Pour le fichier tarif, il y a 150 000 lignes et pour le Ecommerce il y en a 2000

    Merci encore

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    J'espère aussi que tes pièces jointes respectent les originaux
    car je suis un peu étonné des trous - les blancs, les espaces - présents,
    sinon il vaudrait mieux joindre des fichiers respectant la réalité …

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche d'une donnée dans un autre fichier
    Par Cha0022 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/06/2014, 22h23
  2. [XL-2007] Erreur 1004, recherche d'une cellule dans un autre fichier excel
    Par bodd984 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/08/2010, 18h12
  3. [DOM] importer un noeud d'un fichier xml et le coller dans un autre fichier
    Par iznogoud36 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 21/06/2006, 12h55
  4. [VBA] Recherche d'une valeur dans un autre fichiers puis
    Par Nicos77 dans le forum Général VBA
    Réponses: 11
    Dernier message: 24/03/2006, 11h24
  5. Recherche d'une chaine dans une autre chaine
    Par arnapou dans le forum C
    Réponses: 7
    Dernier message: 31/01/2006, 23h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo