2017-10-04 9 views
-2

Je ces données, et la nécessité de le faire entrer dans une séparées par des virgules fichier CSV, appelé filepath $Comment obtenir Comma Délimité tableau au format CSV

$headers = "Meter Ref","Meter CIS Id","Meter Badge Id","Meter Electronic Id","Relationship","Rel Start Date","Rel End Date","Meter ANSI Id","Meter Type","Mfg Serial #","Mfg Lot #","Rel Data Source","Comm Mod Ref","Meter Status","Meter Data Source","Organization(s)" 
$psObject = $null 
$psObject = New-Object psobject 

foreach($o in $headers) 
{ 
    Add-Member -InputObject $psObject -MemberType noteproperty -Name $o -Value "" 
} 

$psObject | Export-Csv $filepath -NoTypeInformation 

$TheCSV = Import-Csv $filepath 

$tabledata = $driver.FindElementsByTagName("tr") | where {$_.Text -match "Meter"} 
$CSV = "" 
$apple = @() 

$apple += $headers -join ',' 

Foreach ($row in $tabledata | select -skip 1) 
{ 
    $apple += $row.Text -replace '\n',',' 
} 

$apple contenu:

 
Meter Ref,Meter CIS Id,Meter Badge Id,Meter Electronic Id,Relationship,Rel Start Date,Rel End Date,Meter ANSI Id,Meter Type,Mfg Serial #,Mfg Lot #,Rel Data Source,Comm Mod Ref,Meter Status,Meter Data Source,Organization(s) 
1-CAIWFB,PWST441096,PWST441096,PWST441096,Delete,2015-04-21 13:49,2015-04-21 13:49, ,Electric Meter, , ,ORG21672,1-CAIZ66,Installed,ORG21672,SOURCE1 
1-CAIWFB,PWST441096,PWST441096,PWST441096,Active,2015-04-21 13:49, , ,Electric Meter, , ,ORG21672,1-CAIZ66,Installed,ORG21672,SOURCE1 
1-100FRE,PWST097870,PWST097870,PWST097870,Inactive,2009-11-01 00:00,2015-04-21 13:49, ,Electric Meter, , ,ORG21672,,Installed,ORG21672,SOURCE1 

La sortie de $apple est exactement comment je veux cela inséré dans un fichier CSV.

Cependant, je ne peux pas utiliser out-file ou export-csv car il est considéré comme une chaîne, donc ne sort que la longueur compte, ou sort les données verticalement, pas séparées par des virgules.

Je ne peux pas non plus utiliser convertto-CSV car cela n'affiche que les longueurs plutôt que les données. Je n'ai aucune idée comment obtenir chaque enregistrement de Row.Text dans le PSObject avec Add-Member.

Edit: sortie lors de l'utilisation Add-Content Output of data when use Add-Content

+0

Je ne comprends pas? C'est déjà un fichier CSV. –

+0

@Bill_Stewart ce fichier CSV est vide, toutes les données sont dans le tableau –

+0

Votre question n'est pas claire pour moi. Je suggère de le réécrire et de montrer un court échantillon des données d'entrée, et comment vous voulez le sortir. –

Répondre

0

J'ai trouvé un moyen de le faire. Pas exactement comment je le veux, mais il fait le travail:

$file = "C:\mtext.txt" 
$filepath = "C:\mcsv.csv" 

$apple | Out-file $file 

$ToCSV = Import-Csv $file -Delimiter ',' 

$ToCSV | Export-Csv $filepath -NoTypeInformation 

Faites-moi savoir de meilleures méthodes.

0

Je ne peux pas tester ce que je n'ai pas accès à la page Web que vous obtenez les données de la table à partir, mais il devrait être aussi simple que cela:

$headers = "Meter Ref","Meter CIS Id","Meter Badge Id","Meter Electronic Id","Relationship","Rel Start Date","Rel End Date","Meter ANSI Id","Meter Type","Mfg Serial #","Mfg Lot #","Rel Data Source","Comm Mod Ref","Meter Status","Meter Data Source","Organization(s)" 
$filepath = "C:\folder\meter.csv" 

Add-Content -Path $filepath -Value ($headers -join ',') 

$tabledata = $driver.FindElementsByTagName("tr") | where {$_.Text -match "Meter"} 

Foreach ($row in $tabledata | select -skip 1) 
{ 
    Add-Content -Path $filepath -Value ($row.Text -replace '\n',',') 
} 

Vous n'avez pas besoin Pour créer des objets ou des tableaux de données, vous ne traitez que des données de chaîne simples. Ces données sont ensuite ajoutées à un fichier texte (avec extension csv) en utilisant la boucle.

Add-Content est idéalement adapté à cette tâche car il ajoute des données à une nouvelle ligne dans le fichier, et va également créer le fichier.

+0

Cela sort les données verticalement. Ill inclure une photo pour vous de voir. –

+0

Mon code sort les données de '$ tabledata' dans le même format. Les données 'verticales' que vous voyez sont celles contenues dans' $ tabledata'.Vos données d'entrée sont en désordre et vos données de sortie sont également en désordre. Vous devez organiser vos données d'entrée avant de pouvoir générer des données propres. Je ne peux pas vous aider avec cela car vous ne fournissez pas un exemple de vos données d'entrée. Votre réponse peut très bien fonctionner mais c'est une solution très hacky et loin du bon code. –

+0

Les données d'entrée sont saisies à partir d'une page Web. C'est le seul format dans lequel il arrive. Voir $ tabledata = $ driver.FindElementsByTagName ("tr") | où {$ _. Text -match "Meter"} - trouver l'élément et saisir les données. –