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 :

#galérien : insérer du des lignes dans un gros fichier


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2020
    Messages : 6
    Par défaut #galérien : insérer du des lignes dans un gros fichier
    Bonjour,
    j'ai un gros fichier txt de 300mo de data avec plusieurs champs par ligne
    je dois y ajouter un gros paquet de lignes (1000)

    il faut faire ça vite donc j'ai abandonné le batch pour le vbs que je maîtrise bcp moins.

    voici donc mon pb en illustration

    fichier dispo :
    fichier_complet.txt
    ligne_a_ajouter.txt

    le fichier_complet.txt est de la forme :
    #start
    champ1 champ2 champ3
    champ1 champ2 champ3
    champ1 champ2 champ3

    champ1 champ2 champ3
    #END

    Le fichier ligne_a_ajouter.txt
    champ1 champ2 champ3
    champ1 champ2 champ3
    champ1 champ2 champ3

    Vous l'avez bien compris il faut retirer le #end
    insérer les ligne a ajouter
    et remettre le #end a la fin

    et bah je n'y arrive pas !
    je sais supprimer une ligne
    insérer du texte mais pas plusieurs champs
    et après 5h de remue méninge, j’appelle à l'aide...

    merci

  2. #2
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    bonjour,

    à l'énoncé du problème je comprends qu'il n'y a qu'un seul #start en début de fichier et un seul #end en fin de fichier, est-ce exact ?
    si je pose cette question, c'est qu'il arrive qu'un problème évolue au fil des propositions...
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2020
    Messages : 6
    Par défaut
    Bonjour.
    Oui c’est ça, 1 seule occurrence de la 1ere ligne et 1 seule de la dernière

  4. #4
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    il y a plusieurs façons d'aborder ce genre de problème
    celui qui consiste à n'utiliser que les ressources par défaut du système doit passser par le FileSystemObject
    ce n'est pas le plus performant mais ça devrait tourner sur toutes les configurations

    cet exemple présuppose :
    qu'il s'agit de données ASCII
    qu'il n'existe aucun caractère y compris espace, CR et/ou LF après #end
    note: la 1ère ligne mise en commentaire permet de tester l'existence du composant ADO.Stream qui permettrait un code plus performant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'Set adost = CreateObject("ADODB.Stream")
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set sfile = fso.GetFile("fichier_complet.txt")
    Set stream = sfile.OpenAsTextStream(1,0)
    buffer = stream.Read(sfile.Size - 4)
    stream.Close
    Set dtastream = fso.OpenTextFile("ligne_a_ajouter.txt",1)
    Set stream = fso.OpenTextFile("fichier_encorepluscomplet.txt",2,True)
    stream.Write buffer
    stream.Write dtastream.ReadAll
    stream.Write vbCrLf & "#end"
    stream.Close
    dtastream.Close
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2020
    Messages : 6
    Par défaut
    Respect...
    ça a l'air de fonctionner (je vais faire tester le gros fichier par le système mais il m'a l'air correct)
    par contre possible de commenter les lignes pour que je comprenne?
    De plus, peut-on renommer le fichier final comme celui d'origine?
    (j'ai bien compris qu'on ne modifie par l'original mais qu'on crée un 3ème fichier global)


    Mais sinon Bravo et un grand merci !!!

  6. #6
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 302
    Par défaut
    par contre possible de commenter les lignes pour que je comprenne?
    De plus, peut-on renommer le fichier final comme celui d'origine?
    voilà :

    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
    'Set adost = CreateObject("ADODB.Stream")
    Set fso = CreateObject("Scripting.FileSystemObject")
    ' instanciation de l'objet File du fichier source "fichier_complet"
    ' sans ouverture directe pour pouvoir récupérer sa taille en octets (sfile.Size) et en faire une copie
    Set sfile = fso.GetFile("fichier_complet.txt")
    ' copie de sauvegarde avant traitement la précédente sauvegarde sera écrasée
    sfile.Copy "fichier_complet.bak"
    ' ouverture fichier source en lecture (format ascii)
    Set stream = sfile.OpenAsTextStream(1,0)
    ' lecture de la totalité du fichier source moins les 4 derniers caractères correspondant au trailer #end
    buffer = stream.Read(sfile.Size - 4)
    stream.Close
    ' ouverture en lecture du fichier contenant les données à ajouter (format ascii)
    Set dtastream = fso.OpenTextFile("ligne_a_ajouter.txt",1,False,0)
    ' création du nouveau fichier complet : le fichier source initial est écrasé d'où la sauvegarde préalable
    Set stream = fso.OpenTextFile("fichier_complet.txt",2,True,0)
    ' écriture du contenu initial sans le trailer #end
    stream.Write buffer
    ' écriture des données à ajouter
    stream.Write dtastream.ReadAll
    ' écriture du nouveau trailer #end
    stream.Write vbCrLf & "#end"
    stream.Close
    dtastream.Close
    ' en cas d'incident lors du traitement il suffit de renommer fichier_complet.bak en fichier_complet.txt
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

Discussions similaires

  1. [XL-2016] Récupérer des lignes dans un autre fichier excel sous condition
    Par Malkiya dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/03/2018, 12h07
  2. Réponses: 7
    Dernier message: 09/06/2010, 17h47
  3. Réponses: 5
    Dernier message: 23/07/2009, 19h49
  4. [VBA-E] Problème pour insérer des lignes dans une feuille Excel
    Par skystef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2007, 14h13
  5. Insérer des lignes dans une StringGrid
    Par da_latifa dans le forum Composants VCL
    Réponses: 1
    Dernier message: 26/09/2005, 12h45

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