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

Scripts/Batch Discussion :

Multi Insert colonne dans un fichier texte ?


Sujet :

Scripts/Batch

  1. #1
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut Multi Insert colonne dans un fichier texte ?
    Bonjour a tous,

    Je n'ai peut être pas le terme ou les mots adéquates, je montre donc avec des copies d’écrans
    avec Notepad++ il est possible de faire une sélection d'une colonne n'importe ou du moment ou il y a du texte avec la combinaison Alt+Mouvement de la souris pour faire la sélection d'une colonne et il est aussi d’écrire en pré-sélectionnant

    Exemple plus parlant avec les copies d'écrans
    1) Mon fichier de base :
    Nom : Note_1.PNG
Affichages : 466
Taille : 18,7 Ko

    2) Mon fichier avec la sélection (le trait avec les lettres C de coucou) (avec la combinaison de touche ATL+ SelectSouris)
    Nom : Note_2.PNG
Affichages : 450
Taille : 18,3 Ko

    3) Mon fichier avec l'insertion multiple
    Nom : Note_3.PNG
Affichages : 419
Taille : 17,9 Ko


    Est-il possible de faire cette même chose avec powershell ?
    Je pense qu'il faut définir un pointeur mais sur toute une colonne du fichier je ne vois pas trop comment faire

    l'avantage est d’évité l'insertion en lisant chaque ligne ...


    Exemple mon tableau ressemblerait a un format suivant :
    Nom : Note_4.PNG
Affichages : 396
Taille : 1,7 Ko

    Je ne peux pas utiliser les espaces (\s+) comme séparateurs car dans les valeurs j'ai des espaces et ça met la grouille dans la séparation
    Dans une routine je prends la ligne ayant les tirets qui me sers de référence pour faire les séparations des colonnes ou je recupere le Length, ça me donne chaque position de séparateur pour les lignes suivantes
    J'ai donc écrit un autre bloc pour faire le découpage mais cela prend plus de 3 heures et des fois 6h en fonction des données a traitées, cela pourrais aller beaucoup plus vite si j'arrive a faire un traitement au lieux de plusieurs de chaque ligne

    En vous remerciant d'avance

  2. #2
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    ça doit être une piste, je viens de trouvé ceci

    (gc "TonFichier") -replace ".{7}" , "$&;" | sc out.txt

    Tous les 7 caractères il va mettre un point virgule et sur chaque ligne
    J'ai testé sans le $& ça ne fonctionne pas terrible et donc ça a son importance

    Le problème avec cette commande c'est qu'il positionne un point virgule tous les 7 caractères et j'ai des positions différente a mettre, exemple : 7, 19, et 55
    J'ai donc tester ".{7, 19, 55} ... mais ça ne fonctionne pas des idées ?

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 192
    Points : 5 774
    Points
    5 774
    Par défaut
    C'est quoi l’objectif ?

  4. #4
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    d'aller plus vite et d’évité les boucles interminable.

  5. #5
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 192
    Points : 5 774
    Points
    5 774
    Par défaut
    L'objectif est d'ajouter une guillemet aux 7eme caractères ?

  6. #6
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    Non c'est le 10 caractère de chaque ligne --> $test1 = "
    C'est possible faire une insertion facilement en faisant une boucle sur chaque ligne et d'y faire l'insertion mais ça prendre beaucoup trop de temps de faire un balayage de chaque lignes, j'ai plusieurs insert a faire sur la même ligne exemple ça pourrait être la position 10 puis 14 et la 21
    Ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (gc "TonFichier") -replace ".{7}" , "$&;"
    fait l'insertion d'une virgule tous les 7 caractères ou il trouve une ligne (sans faire de boucle de chaque lignes, gros gain de temps)
    J'ai testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (gc "TonFichier") -replace ".{10,14,21}" , "$&;"
    en espérant que ça aurait pu faire les insertions au emplacement 10,14 et 21 mais non dans mes rêves ...

  7. #7
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 192
    Points : 5 774
    Points
    5 774
    Par défaut
    En vérité c'est une simplification d'écriture de code, il parcourt chaque ligne pour faire le remplacement.

    Le -replace tel que tu l'utilise est de type expression régulière. Ce que tu souhaite faire est réalisable en cherchant un peu.

  8. #8
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    En répondant de ce genre de remarque : En cherchant un peu ?
    La réponse est certaines : Sympa l'esprit d'aide ! (la perception que j'en ai)
    Si javais trouvé quelque chose je serais pas venu demander de l'aide dans le forum ... Oui oui j'ai recherché avec l'ami de tous "Google" !


    Comme j'ai déjà dit, j'ai déjà fait un bout de code qui fonctionne plutôt bien mais pas du tout optimisée, en fonction de la taille du fichier (des fichiers) cela prend de 3h a 6h (2Go à 4Go), et effectivement j'utilise un foreach pour lire chaque ligne et faire l'insert mais cela prend beaucoup de temps !
    Si une fonction existe en powershell tel-que notepad++ qui fait une sorte de sélection verticale pour faire l'insert serait top !
    Merci d'avance

  9. #9
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 192
    Points : 5 774
    Points
    5 774
    Par défaut
    Je pensais qu'en aiguillant ta recherche sur les expressions régulières tu pourrais t'en sortir.

    Je n'ai pas la science infuse (d'ailleurs je ne connais pas le $&) et l'expression régulière ne m'est pas apparu en clair, désolé que cet réponse ne te suffise pas et que la solution clé en main ne te soit pas encore fournie.

    Nous n'avons pas non plus ton code avec la boucle "foreach" qui semble fonctionner mais lent, ce qui ne nous permet non plus de tenter de l'optimiser.

  10. #10
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 192
    Points : 5 774
    Points
    5 774
    Par défaut
    Voici en complément un début d'optimisation pour la lecture de gros fichier
    http://www.happysysadm.com/2014/10/r...owershell.html

  11. #11
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    Bonjour,

    Le fait de demander de l'aide dans un forum pour avoir une solution clef en main est peut être le top mais c'est pas ce que je demande.
    Comme vous avez pu le dire :
    En vérité c'est une simplification d'écriture de code, il parcourt chaque ligne pour faire le remplacement.
    Il me semble pas nécessaire de poster le code en soit vu que c'est assez simple (mais très lent).

    De souvenir en VB.Net ou C# il était possible de définir un offset sur un fichier et de récupérer la valeur ou écrire a un emplacement sans forcement lire tout le fichier, cela est peut-être possible avec a faire avec Powershell ?

    L'article que vous avez donné est très intéressant et super bien expliqué, merci beaucoup

Discussions similaires

  1. [Débutant] extraire un caractère d'une colonne dans un fichier texte
    Par 6iluvatar9 dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/11/2010, 14h48
  2. Ecrire une colonne dans un fichier texte
    Par neutrino314 dans le forum VBA Access
    Réponses: 3
    Dernier message: 29/09/2009, 08h31
  3. Ecrire des vecteurs colonnes dans un fichier text
    Par Ballim dans le forum MATLAB
    Réponses: 6
    Dernier message: 14/11/2008, 09h08
  4. insertion espace dans un fichier texte
    Par Giuseppe24 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 24/10/2008, 14h25
  5. Séparateur de colonnes dans un fichier texte
    Par robert323 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/01/2008, 12h02

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