2011-03-30 12 views
3

Je suis à la recherche d'un script, ne doit pas être en PS, mais doit fonctionner sous Windows, qui convertit un fichier texte d'une colonne comme ci-dessousde script PowerShell pour convertir le fichier CSV une colonne

abc 
def 
ghi 

Je suis en train de faire cette modification dans Excel en utilisant = concaténer, mais un script serait meilleur.

Répondre

5

L'utilisation peut utiliser une expression régulière pour insérer des caractères au début et à la fin.

get-content ./myonlinecolumn.txt | foreach {$_ -replace "^","'" -replace "`$","',"} 

Ou vous pouvez utiliser l'opérateur -f format:

get-content ./myonlinecolumn.txt | foreach {"'{0}'," -f $_ } 

Il est un peu plus de travail pour enlever la virgule de fin, mais cela aussi possible

$a = get-content ./myonlinecolumn.txt 
get-content ./myonlinecolumn.txt | foreach { if ($_.readcount -lt $a.count) {"'{0}'," -f $_ } else {"'{0}'" -f $_ }} 
+0

Merci! Existe-t-il un moyen facile de réduire les valeurs (supprimer les espaces avant/arrière)? Sinon, je peux faire. – Sean

+0

Vous pouvez utiliser $ _. Trim() –

3

Ma première idée était similaire à ce que Chad a déjà écrit, c'est un contrôle sur le numéro de ligne. J'ai donc essayé une solution différente. Pas très agréable mais je posterai aussi :)

((gc c:\before.txt | % {"'"+$_+"'"}) -join ",*").split("*") | out-file c:\after.txt 
+2

Vous pouvez joindre avec ", {backtick} n", puis omettre le '.split' :) (utilisé {backtick} en raison d'une mauvaise mise en forme ici sur SO) – stej

+0

Pouvez-vous brièvement expliquer comment cela fonctionne? Je comprends le scénario de Chad, mais pas celui-ci. – Sean

+0

@Sean, l'idée est: '(gc c: \ before.txt |% {" '"+ $ _ +"' "}) -join", {backtick} n "| hors fichier c: \ after.txt'. Les parenthèses sont nécessaires pour évaluer le premier pipeline (il retourne un tableau de chaînes). Ensuite, il est joint avec ',' 'n' (où * {backtick} n * est * nouvelle ligne *, même chose que' \ n' dans les autres langues. \ R \ n \ r \ nWhat le résultat est redirigé vers 'out-file'. n' test – stej

0

Vous pouvez simplement utiliser

(gc myfile | %{"'$_'"}) -join ', 
' 

ou, si vous aimez échappe:

(gc myfile | %{"'$_'"}) -join ",`n" 

Cette charge le fichier dans un tableau de strings (Get-Content), puis traite chaque chaîne en la plaçant dans des guillemets simples. (Utilisez `" '$ ($ _. Trim())' "si vous avez besoin de réduire les espaces, aussi). Ensuite, les lignes sont jointes avec une virgule et un saut de ligne (ceux-ci peuvent être directement intégrés dans des chaînes).

Si vos valeurs peuvent contenir des guillemets simples (qui doivent être échappé) il est trivial de bâton là-dedans aussi:

(gc myfile | %{"'$($_.Trim() -replace "'","''")'"}) -join ",`n" 
Questions connexes