Exporter une table de hachage au format CSV

David Drew

J'essaie d'écrire un script Powershell qui prendra plusieurs très longs fichiers séparés par des espaces et exportera certaines colonnes vers des fichiers CSV portant le même nom.

J'ai une version réussie:

Foreach ($file in $files) {
    $WriteString=""
    $outfile = $path + "\" + ($file -replace ".{4}$") + ".csv"  

    Get-Content -Path $path"\"$file | Select-Object -Skip $lines | ForEach-Object{
        $ValueArray = ($_ -split "\s+")
        $WriteString += $ValueArray[1] + "," + $ValueArray[2] + "," + $ValueArray[3] + "`n"
    } 

    Add-Content -Path $outfile -Value $Writestring
 }

Cela fonctionne, mais est extrêmement lent - il faut plus de 16 heures pour que le script s'exécute complètement. La cause principale (je pense) est d'ajouter à la chaîne. J'ai essayé d'améliorer cela en utilisant une table de hachage:

Foreach ($file in $files) {
    $outfile = $path + "\" + ($file -replace ".{4}$") + ".csv"

    $ParseLines = Get-Content -Path $path"\"$file | Select-Object -Skip $lines 

    $OutputData = ForEach ($Line in $ParseLines) {
        $ValueArray = ($Line -split "\s+")
        $Line | Select-Object $ValueArray[1], $ValueArray[2], $ValueArray[3]
    } 

   $OutputData | Export-CSV -Path $outfile #-NoTypeInformation
 }    

Cependant, cela n'exporte qu'une seule ligne de la table de hachage:

#TYPE Selected.System.String
"636050.000","7429825.000","77.438"
,,
,,
,,
,,
,,
,,

Si je change la dernière ligne en:

Set-Content -Path $outfile -Value $OutputData

alors la sortie devient:

@{636050.000=; 7429825.000=; 77.438=}
@{636075.000=; 7429825.000=; 75.476=}
@{636100.000=; 7429825.000=; 74.374=}
@{636125.000=; 7429825.000=; 73.087=}
@{636150.000=; 7429825.000=; 71.783=}
@{636175.000=; 7429825.000=; 70.472=}

Je fais clairement quelque chose de mal avec la table de hachage ou Export-CSV, mais je ne peux pas le comprendre. Toute aide sera fortement appréciée.

Comme demandé ci-dessous, voici une partie d'un fichier source. J'ai supprimé toutes les lignes non-données et n'inclut pas les en-têtes dans mon CSV de sortie, car le programme d'entrée (dans lequel les fichiers CSV entrent) n'en a pas besoin et les sorties sont évidentes (peu de chance de obtenir les valeurs X, Y et Z erronées simplement en regardant les données).

*
* DEFINITION
*   HEADER_VARIABLES 3
*     QUALITIES        C  16   0 key
*     DATE             C  12   0
*     TIME             C  12   0
*   VARIABLES 4
*     X                F  12   3
*     Y                F  12   3
*     Z                F  12   3
*     gcmaq0.drg       F  12   3
*
*        1         2         3         4
*23456789012345678901234567890123456789012345678
*         X|          Y|          Z| gcmaq0.drg|
*
* HEADER:QUALITIES       29Aug2018   13:53:16    
  636575.000 7429800.000      75.551      75.551
  636600.000 7429800.000      77.358      77.358
  636625.000 7429800.000      78.823      78.823
  636650.000 7429800.000      80.333      80.333
  636675.000 7429800.000      82.264      82.264
  636700.000 7429800.000      84.573      84.573
  636725.000 7429800.000      87.447      87.447
Ansgar Wiechers

Évitez les opérations lentes telles que l'ajout de chaînes (ou de tableaux) dans une boucle. Change ça:

Get-Content -Path $path"\"$file |
    Select-Object -Skip $lines |
    ForEach-Object {
        $ValueArray = ($_ -split "\s+")
        $WriteString += $ValueArray[1] + "," + $ValueArray[2] + "," + $ValueArray[3] + "`n"
    }

Add-Content -Path $outfile -Value $Writestring

dans ceci:

Get-Content -Path "${path}\${file}" |
    Select-Object -Skip $lines |
    ForEach-Object {
        ($_ -split "\s+")[1..3] -join ','
    } |
    Set-Content -Path $outfile

Remplacez Set-Contentpar Add-Contentsi vous souhaitez réellement ajouter à un fichier existant.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Exporter la table de hachage imbriquée au format csv dans powershell

exportation d'un tableau dans une table de hachage au format CSV sans lignes vides

Comment exporter une table au format CSV avec les noms de colonnes dans PHPMYADMIN

Exporter une matrice numpy de nombres complexes au format CSV

Exporter une valeur double au format CSV

Comment utiliser GetEnumerator () pour exporter une table de hachage vers un fichier csv dans PowerShell?

Comment exporter une grande table d'archive au format CSV avec Entity Framework?

Comment créer une nouvelle table et l'exporter au format csv ?

Exporter les données de la table de texte au format .csv (Tableau)

Comment exporter la table de données jQuery au format CSV?

Exporter la table au format csv dans la fonction postgres

Exporter la table HTML au format CSV en électron

Comment exporter ma table SQL au format CSV avec PYTHON

Comment exporter une feuille Google au format CSV en Python sans utiliser de pandas?

Neo4j Meilleur moyen d'exporter une base de données au format CSV

Comment exporter une trame de données au format csv en utilisant des conditions ?

Comment exporter une feuille de calcul au format CSV sans évaluer les formules

Exporter un tableau numpy + une chaîne au format CSV

Difficulté à exporter une liste d'ordinateurs au format CSV

Exporter MySQL au format CSV

Tables de hachage d'expression Powershell au format CSV

Comment obtenir une table dans un format à l'aide de pandas et l'exporter vers csv?

comment exporter le résultat de powerhel au format csv

Exporter l'ensemble de données <Row> au format CSV

Exporter au format CSV à l'aide de Stream Writer

Exporter la réponse de l'API au format CSV

Comment exporter correctement au format CSV à l'aide de Powershell

Exporter le titre de la colonne au format csv

Comment exporter l'ensemble de résultats Postgres au format CSV d'une connexion db distante vers une machine locale?

TOP liste

chaudétiquette

Archive