Question Conversion export métadonnées en csv
- hxcode
- Auteur du sujet
- Hors Ligne
- Nouveau membre
Réduire
Plus d'informations
- Messages : 1
- Remerciements reçus 0
il y a 1 an 1 mois - il y a 1 an 1 mois #33390
par hxcode
Conversion export métadonnées en csv a été créé par hxcode
Bonjour,
Pour l'un de mes chantiers de migration d'une GED, je possède un fichier TXT contenant la liste des documents (plusieurs milliers) et leurs métadonnées.
Pour un document, cela représente dans le fichier TXT un bloc de 210 lignes. La première métadonnée étant "docontrol" et la dernière "updated".
Je souhaiterai convertir le fichier TXT en CSV.
Il est possible de splitter chaque ligne en deux avec ':' --> <nom de colonne> : <valeur>
Exemple de bloc:
docontrol: 1
typedocumentabbr: AP
OfficeModelKey:
GDocVersion:
...
...
WkfP_Name: Arrété
WkfP_IDProcess: ArrétéV8
updated : 20230925
Comment faire pour récupérer l'ensemble des noms de colonnes pour créer un .CSV puis parser le fichier TXT pour alimenter les datas sans devoir créer un PSCustomObject et devoir saisir les 210 colonnes dans le script.
Merci de votre aide.
Pour l'un de mes chantiers de migration d'une GED, je possède un fichier TXT contenant la liste des documents (plusieurs milliers) et leurs métadonnées.
Pour un document, cela représente dans le fichier TXT un bloc de 210 lignes. La première métadonnée étant "docontrol" et la dernière "updated".
Je souhaiterai convertir le fichier TXT en CSV.
Il est possible de splitter chaque ligne en deux avec ':' --> <nom de colonne> : <valeur>
Exemple de bloc:
docontrol: 1
typedocumentabbr: AP
OfficeModelKey:
GDocVersion:
...
...
WkfP_Name: Arrété
WkfP_IDProcess: ArrétéV8
updated : 20230925
Comment faire pour récupérer l'ensemble des noms de colonnes pour créer un .CSV puis parser le fichier TXT pour alimenter les datas sans devoir créer un PSCustomObject et devoir saisir les 210 colonnes dans le script.
Merci de votre aide.
Dernière édition: il y a 1 an 1 mois par hxcode.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 1 an 1 mois #33392
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Conversion export métadonnées en csv
Salut,
peut être ceci :
powershell-scripting.com/index.php/forum...structuredfile#18355
Sinon reprendre le principe de cette fonction:
peut être ceci :
powershell-scripting.com/index.php/forum...structuredfile#18355
Sinon reprendre le principe de cette fonction:
#Remove-AuthenticodeSignature.ps1
Filter Remove-AuthenticodeSignature{
#([Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding] $Encoding="ASCII")
function Parse([String] $FileName)
{ #renvoi toutes les lignes sauf celles du bloc de signature
$isSignatureBloc=$False
Get-Content -Path $FileName|
Foreach-Object {
switch ($_)
{
"# SIG # Begin signature block" {$isSignatureBloc=$True;continue}
"# SIG # End signature block" {$isSignatureBloc=$False;Continue}
default {
if ($isSignatureBloc -eq $false)
#On traite les lignes qui ne se trouvent dans le bloc de signature
{$_}
}#default
}#Switch
}#Foreach
}#Parse
if ($_ )
{
#Récupére un nom de fichier créé par l'OS
$TempFile = [IO.Path]::GetTempFileName()
$FullPath=Resolve-Path "$_"
Write-Debug "$TempFile"
Write-Debug "$FullPath"
#Extrait toutes les lignes sauf la signature dans un fichier temporaire
Parse "$FullPath"|Set-Content "$TempFile"
#Ecrase le fichier d'origine à partir du fichier temporaire
#$FileInfo.Replace ne fonctionne pas car %Temp%
#peut être sur un disque différent de celui de la source :/
Get-Content "$TempFile"|Set-Content "$FullPath"
Del "$TempFile"
}
else {Write-Error "[Remove-AuthenticodeSignature] Ce filtre a reçu une donnée `$null du pipeline."}
}
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 1 an 1 mois - il y a 1 an 1 mois #33393
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Conversion export métadonnées en csv
Je voulais m'assurer que la solution proposée réponde à ton besoin, du coup un exemple de paramétrage de la fonction Convert-BlockStructuredFile :
La regex de reconnaissance est sensible à la structure des données en entrées :
Le résultat en psObject
$sbSplit = {
#Ne déclare pas de paramètre mais référence l'objet du pipeline
# Une regex peut construire un membre de type NoteProperty ou d'un autre type
#La fonction Convert-BlockStructuredFile construit en interne l'objet et
#lui ajoute chaque nouveau membre créé par ce scriptblock
switch -regex ($_) {
#Nom +( espaces optionnels)+ séparateur + valeur
'^(?<Name>.*?)\s*:(?<Value>.*)$' {
Write-Debug ("`tAjoute la propriété {0}" -F $Matches.0)
New-Object Management.Automation.PSNoteProperty($Matches.Name, $Matches.Value)
Continue
}
'' { Write-Debug "`tLigne vide"; Continue }
default { Write-Error 'Cas inconnu : $Element' }
}
} #$sbSplit
$file = 'c:\temp\docontrol.txt'
$properties = @(
'docontrol',
'typedocumentabbr',
'OfficeModelKey',
'GDocVersion',
'WkfP_Name',
'WkfP_IDProcess',
'updated'
)
$Objets = Get-Content $File -Encoding UTF8 | Convert-BlockStructuredFile -LinePerBloc 7 -Property $properties -Split $sbSplit
La regex de reconnaissance est sensible à la structure des données en entrées :
ici la ligne 'updated' contient un espace avant le caractère deux point ':'WkfP_IDProcess: ArrétéV8
updated : 20230925
Le résultat en psObject
$objets
docontrol : 1
typedocumentabbr : AP
OfficeModelKey :
GDocVersion :
WkfP_Name : Arrété
WkfP_IDProcess : ArrétéV8
updated : 20230925
docontrol : 3
typedocumentabbr : AP
OfficeModelKey :
GDocVersion :
WkfP_Name : Arrété
WkfP_IDProcess : ArrétéV6
updated : 20230725
docontrol : 2
typedocumentabbr : AP
OfficeModelKey :
GDocVersion :
WkfP_Name : Arrété
WkfP_IDProcess : ArrétéV10
updated : 20230925
Tutoriels PowerShell
Dernière édition: il y a 1 an 1 mois par Laurent Dardenne. Raison: coquille
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 1 an 1 mois #33395
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Conversion export métadonnées en csv
un oubli :
Comment faire pour récupérer l'ensemble des noms de colonnes pour créer un .CSV puis parser le fichier TXT pour alimenter les datas sans devoir créer un PSCustomObject et devoir saisir les 210 colonnes dans le script.
La solution proposée parse le fichier TXT et crée une liste de PSCustomObject.
Le paramètre de l'appel doit connaitre le nombre de ligne constituant un objet (ici 210) et les noms de tous les champs/propriété.
Une fois la liste construite tu en fais ce que tu veux
Comment faire pour récupérer l'ensemble des noms de colonnes pour créer un .CSV puis parser le fichier TXT pour alimenter les datas sans devoir créer un PSCustomObject et devoir saisir les 210 colonnes dans le script.
La solution proposée parse le fichier TXT et crée une liste de PSCustomObject.
Le paramètre de l'appel doit connaitre le nombre de ligne constituant un objet (ici 210) et les noms de tous les champs/propriété.
Une fois la liste construite tu en fais ce que tu veux
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.107 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les initiés
- Conversion export métadonnées en csv