J'essaie d'importer un fichier CSV. Il a des données aléatoires sur le dessus et je ne peux pas sauter les lignes car je ne suis pas sûr d'où se termine les données aléatoires. Il y aura 2 lignes vides et, après cela, il y a des en-têtes et des données souhaitées. P>
permet de dire que les données aléatoires ressemblent à ceci "AD Group", "ID utilisateur", "Propriété", "NtDomain \ Médecins", "Sattar" "activé" "NtDomain \ Médecins", "Shayla" "Désactivé" "NTDomain \ infirmières", "mjane", "activé" p>
"AD Groupe", "DonnéName", "ObjectClass", "Nom", "Nom" ... Morecolumns
"NTDomain \ utilisateurs", "utilisateur1", "utilisateur", "utilisateur", "1"
"NTDomain \ user2", "utilisateur1", "utilisateur", "user1_1", "2" p>
Comment puis-je importer les données sous les en-têtes (nom de famille, nom, nom). Aussi je veux juste choisir des colonnes? P>
3 Réponses :
## Read the file into an array, line-terminated
$f = [System.Io.File]::GetAllLines('path-to-csv')
## Stage the array to receive the filtered results
$clean = @()
## Loop through each entry in the file
for ($i = 0; $i -lt $f.count; $i++) {
## When the CSV header is found, filter the results and exit
if ($f[$i] -eq "Name Phone_Number City") {
$clean = $f[($i..($f.count - 1))]
break
}
}
## Turn the string array[] into and object that can be used in PowerShellese
$clean = $clean | convertfrom-csv
Quelque chose comme ceci est un motif que vous pouvez tester avec l'utilisation de ici Strings code> comme entrée plutôt qu'un gros fichier. Très semblable à la réponse de ThePip3r. En outre, il apparaît que votre entrée n'utilise pas virgade code> comme délimiteur, donc spécifié espace code>.
à condition que la ligne d'en-tête soit fixe et peut être utilisée comme séparateur,
J'utiliserais une regex avec un Lookahead positif :
Name Phone_Number City ---- ------------ ---- Nick 800-524-8763 NewYork Mike 112-223-2222 Richmond
Savez-vous à quoi ressemblera la ligne d'en-tête, ou pouvez-vous être confiant qu'aucune ligne avant la ligne d'en-tête ne commence par «nom»?
Ce fichier aura plusieurs en-têtes 1 = A, B, C et sous celui-ci, il aura un autre ensemble d'en-tête 2 = nom, téléphone, ville et nom sera toujours un en-tête.
Donc, vous auriez besoin de détecter le démarrage des données comme l'en-tête "Nom Phone ..." et la fin des données par l'en-tête "A B C". Et analyser manuellement chaque ligne. Ou, utilisez un fichier temporaire, où vous enregistrez des données filtrées (à l'aide de la détection de démarrage de données / extrémité par des en-têtes), puis importer le fichier Temp.
Vos exemples de données sont délimités par des espaces, mais votre commentaire indique une virgule?
Si j'ouvre le fichier dans le bloc-notes, il affiche les données telles que "A", "B", "C" "" W "," DD "," Q "" U "," P "", "A", "Nom", "Phone_number", "City", "State" "2", "Nick", "Nick", "Newyork", "NY" "0", "Mike", "112-223 -2222 "," Richmond "," VA "La rangée souhaitée a plus de colonnes, mais je ne veux obtenir que des colonnes. De plus, je veux aussi ignorer la première colonne de la sélection.