2016-02-01 2 views
0

J'essaie de combiner plusieurs groupes de lignes dans un fichier en lignes CSV (les groupes étant séparés par une ligne vide entre eux). Je viens de copier les lignes plusieurs fois pour cet exemple mais les informations diffèrent pour chaque groupe dans les fichiers de données réels.Comment combiner plusieurs groupes de lignes dans un fichier?

IM123456 
01/20/16 09:44:01 
Reassignment 
PZSR7Z 
Reassignment from xxx-xxx-xxx-xxx to xxx-xxx-xxx-xxx-xxx-xxx-xxx 


IM123456 
01/20/16 09:44:01 
Reassignment 
PZSR7Z 
Reassignment from xxx-xxx-xxx-xxx to xxx-xxx-xxx-xxx-xxx-xxx-xxx 


IM123456 
01/20/16 09:44:01 
Reassignment 
PZSR7Z 
Reassignment from xxx-xxx-xxx-xxx to xxx-xxx-xxx-xxx-xxx-xxx-xxx 


IM123456 
01/20/16 09:44:01 
Reassignment 
PZSR7Z 
Reassignment from xxx-xxx-xxx-xxx to xxx-xxx-xxx-xxx-xxx-xxx-xxx 

IM123456 
01/20/16 09:44:01 
Reassignment 
PZSR7Z 
Reassignment from xxx-xxx-xxx-xxx to xxx-xxx-xxx-xxx-xxx-xxx-xxx

Avec la sortie collée ci-dessus, comment pourrais-je l'obtenir pour ressembler à ce qui suit?

IM123456,01/20/16 09:44:01,Reassignment,PZSR7Z,Reassignment from xxx-xxx-xxx-xxx to xxx-xxx-xxx-xxx-xxx-xxx-xxx 
IM123456,01/20/16 09:44:01,Reassignment,PZSR7Z,Reassignment from xxx-xxx-xxx-xxx to xxx-xxx-xxx-xxx-xxx-xxx-xxx 
IM123456,01/20/16 09:44:01,Reassignment,PZSR7Z,Reassignment from xxx-xxx-xxx-xxx to xxx-xxx-xxx-xxx-xxx-xxx-xxx 
IM123456,01/20/16 09:44:01,Reassignment,PZSR7Z,Reassignment from xxx-xxx-xxx-xxx to xxx-xxx-xxx-xxx-xxx-xxx-xxx 
IM123456,01/20/16 09:44:01,Reassignment,PZSR7Z,Reassignment from xxx-xxx-xxx-xxx to xxx-xxx-xxx-xxx-xxx-xxx-xxx

J'ai essayé d'utiliser la solution de here, mais j'ai eu un moment difficile de l'appliquer à mon exemple.

Répondre

1

Lire le fichier dans son ensemble, le fractionner en deux sauts de ligne consécutifs ou plus, supprimer les éléments vides, puis remplacer les sauts de ligne restants par des virgules et tout réécrire dans un fichier.

(Get-Content 'C:\path\to\input.txt' -Raw) -split ' *(\r\n){2,}' | 
    Where-Object { $_.Trim() } | 
    ForEach-Object { $_ -replace ' *\r\n', ',' } | 
    Set-Content 'C:\path\to\output.csv' 

Si votre version de PowerShell ne supporte pas la sortie tuyau Get-Content -RawGet-Content par Out-String:

(Get-Content 'C:\path\to\input.txt' | Out-String) ... 
+0

génial, merci! Aller à comprendre comment tout cela fonctionne – lacrosse1991

+1

Ou même plus court ... '(Get-Content 'C: \ chemin \ à \ input.txt' -Raw) -split" (?: \ R \ n) {2,} "-replace" \ s * \ r \ n ", '," – TheMadTechnician