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 :

Manipulation CSV [PowerShell]


Sujet :

Scripts/Batch

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 44
    Par défaut Manipulation CSV
    Bonjour,
    je suis désolé si la question est idiote mais je débute totalement avec PowerShell

    voici ce que je veux faire, j'a un fichier CSV qui contient 1 500 000 lignes
    mais ces lignes ne concernent que 17 000 ID

    je souhaites récupérer les 17000 ID

    format du CSV :

    ID,text, text
    1234567890123,toto
    1234567890123,tata
    1234567890123,titi
    1234567890124,toto
    1234567890124,tata
    1234567890124,titi
    et du coup ce qui m'intéresse c'est d'avoir :
    1234567890123
    1234567890124
    actuellement je fais ça en batch mais àa prend plusieurs heures
    j'ai vu qu'il existait des commande import-csv

    à ce stade


    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $a = Get-Content ("C:\data\fichier_global\fichier_20190827.csv")
    Foreach ( $line in $a ) {
          $line_splitted = $line.split(",")
          Write-Host $line_splitted[0]  }

    et je traite les doublons dans un second temps à partir du fichier temporaire issue de ce traitement

    j'a l'impression qu'il y a plus rapide et efficace

    d'avance merci de votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 44
    Par défaut
    bonjour, j'ai réussi à faire un script avec une méthode plus rapide :

    Code PowerShell : 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
    $encoding = "ASCII"
    [regex]$regex = "^\w\:\\"
     
    foreach ($InputFile in $args) {
     
    	Write-Host "ReadFile : Processing $InputFile"
     
    	#Convert into complete path if not already done
    	$FilePath = ""
    	If ($regex.ismatch($InputFile)) {
    		$FilePath = $InputFile
    	}
    	ElseIf ($regex.ismatch($InputFile.fullname)) {
    		$FilePath = $InputFile.fullname
    	}
    	Else {
    		$FilePath = "$($pwd)\$InputFile"
    	}
    	$InputFile = Get-Item $FilePath
    	$FullName = $InputFile.FullName
     
    	try {
    		Write-Host "ReadFile : Reading $FullName"
    		Write-Host "ReadFile : Encoding $encoding"
    		# Open StreamReader
    		$reader = new-object System.IO.StreamReader($FullName,[System.Text.Encoding]::$encoding)
     
    		[int]$NbLines = 0
    		# Create empty hashtable
    		$hash = @{}
    		while ($reader.Peek() -ge 0) {
    			$NbLines++
    			# Read line
    			$line = $reader.ReadLine()
    			# Get first 13 characters
    			if ($line.length -ge 13) {
    				$key = $line.substring(0, 13)
    				# If hasn't been stored yet, add it to the hashtable and print it
    				# This ways only disctinct element will be printed
    				if(! $hash.ContainsKey($key)) {
    					$hash.add($key, 1)
    					Write-Output $key
    				}
    			}
    		}
    		Write-Host "ReadFile : $NbLines lines read"
    	}
    	catch [System.IO.IOException] {
    		Write-Host $_
    	}
    	finally {
    		if ($reader -ne $null) {
    			Write-Host "ReadFile : Dispose reader"
    			$reader.dispose()
    			$reader.close()
    		}
    	}
    }


    bilan : batch = 8 H
    premier script PowerShell = 2H
    dernière version 2 min

    bonne journée

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut
    Ton csv ne respecte pas la même structure du début à la fin ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 218
    Par défaut
    Sinon comme ceci, mais je pense que ça sera moins performant (en terme de temps, mais il sera tout de même plus pertinent dans les résultats)
    Après c'est plus facilement maintenable.

    Code powershell : Sélectionner tout - Visualiser dans une fenêtre à part
    Select-String -Path $InputFile -Pattern '^(\d{13}),.*' -Encoding ascii | ForEach-Object {$_.Matches.Groups[1].Value} | Select-Object -Unique

    Alors combien de temps ?
    Chez moi sur un fichier de 1 500 000 lignes il à mis 26 secondes, mais ce n'est pas le même contenue que le tiens

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 44
    Par défaut
    oui quelques seconde, le traitement complet dure 10 minutes a cause d'autres opérations de contrôles en amont

    mais c'est cool j'ai découvert un nouveau jouet

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Avril 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Avril 2019
    Messages : 6
    Par défaut
    Si c'est toujours d'actualité, je peux te proposer cela:

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $a = Import-Csv "C:\data\fichier_global\fichier_20190827.csv" -Delimiter ","
    #$a | get-member                              ## => tu verras ton objet
    # $a.ID | Select-Object -Unique >> fichier    ## => tu auras le trie de tes ID et tu le balances dans ton fichier, ce sera peut être le plus rapide
    # $a.ID                                       ## Tu as toutes les ID
    # tu peux faire une boucle et préciser ou non l'ID:
    Foreach ( $line in $a.ID ){
        $line 
    }

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

Discussions similaires

  1. [PowerShell] script pour manipuler en powershell un csv avec une seule colonne
    Par laurentSc dans le forum Scripts/Batch
    Réponses: 10
    Dernier message: 11/04/2017, 14h44
  2. [Powershell] traiter les pipe dans un csv
    Par dferot dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 16/12/2008, 09h52
  3. Manipulation de fichier csv
    Par midgard30 dans le forum Général VBA
    Réponses: 2
    Dernier message: 12/08/2008, 06h35
  4. [CSV] Comment manipuler un fichier csv ?
    Par gorgoroth dans le forum Langage
    Réponses: 5
    Dernier message: 20/03/2008, 22h35
  5. [CSV] recuperation d'un fichier et manipulation.
    Par suya95 dans le forum Langage
    Réponses: 1
    Dernier message: 26/07/2006, 16h08

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