Question Convertir un tableau

Plus d'informations
il y a 8 ans 2 mois #24837 par Karon
Convertir un tableau a été créé par Karon
Bonjour,

Je recherche un script Powershell qui pourrait convertir le tableau suivant :

[code:1]
TITRE1 TITRE2 TITRE3 TITRE4 TITRE5 TITRE6 TITRE6






AAAA BBBBBBBBBB DDDDDDDDDDD EEEEEEEEEEEEEEEEEEEEEEEEEE 9 2014-05-22 15:20:10.203 2018-01-04 12:01:27.900
[/code:1]

Sous cette forme :

[code:1]
TITRE1;TITRE2;TITRE3;TITRE4;TITRE5;TITRE6;TITRE6
AAAA;BBBBBBBBBB;DDDDDDDDDDD;EEEEEEEEEEEEEEEEEEEEEEEEEE;9;2014-05-22 15:20:10.203;2018-01-04 12:01:27.900
[/code:1]

Tout en sachant que je ne connais pas d'avance :
    Ni la largeur des colonnes
    Ni le nombre de colonnes

J'avais bien un code qui comptait les tirets mais je me retrouve avec un tableau qui perd quelques données ou avec un décalage dans les colonnes.

[code:1]
ForEach ($ligne in $file)
{
If ($nbr -eq $ligne_tiret)
{
$Decoup = $ligne.Split(\" \"«»)
$Tiret = $Decoup.LastIndexOfAny(\"-\"«»)
$Tab_Tiret_Tmp += $Tiret
ForEach ($num in $Tab_Tiret_Tmp)
{
$num++
$Tab_Tiret += $num
}
}
$nbr++
}
[/code:1]

Cordialement,

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 2 mois #24839 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Convertir un tableau
Salut,
il faut connaitre le format d'export d'origine.
Par exemple, est-ce que le séparateur de champ est une tabulation ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 2 mois #24840 par Karon
Réponse de Karon sur le sujet Re:Convertir un tableau
Le séparateur de champ est un espace.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 2 mois #24841 par Karon
Réponse de Karon sur le sujet Re:Convertir un tableau
J'ai réussi à trouver quelque chose qui semble répondre à ma question :

[code:1]
##
## Variables
##

$debut = 0
$REP_LOCAL = Get-Location
$PATH_CRITIQUE = \"$REP_LOCAL\Fichier de gestion\" ## Répertoire ou se trouve le fichier des PC critiques

$file = Get-Content \"$PATH_CRITIQUE\lansweeper_20180112.log\"
$Tab_Tiret_Tmp = @()
$Tab_Tiret = @()
$nbr = 0
$ligne_tiret = 1 ## Ligne des tirets
$entete = 2
$i = 0

$Count = $Tab_Tiret.Count
$nbr = 0

Write-Host (\"Nombre de ligne dans le tableau : {0}\" -f $Count)
Write-Host (\"---\")

ForEach ($ligne in $file)
{

If ($nbr -eq $ligne_tiret)
{
$Decoup = $ligne.Split(\" \")
$Tiret = $Decoup.LastIndexOfAny(\"-\")
$Tab_Tiret_Tmp += $Tiret
ForEach ($num in $Tab_Tiret_Tmp)
{
$num++
$Tab_Tiret += $num
Write-Host (\"Largeur de la colonne : {0}\" -f $num)
}
}
$Count = $Tab_Tiret.Count -1
$deuxieme = 0
$debut = 0
$ligne_out = \"\"
$i = 0
Write-Host (\" #### : {0}\" -f $i) -ForegroundColor DarkCyan
If (($nbr -ge $entete) -and ($Count -gt 0))
{
$ligne_tmp = $ligne
#$ligne
for($j=0;$j -le $Count;$j++)
{
If ($i -lt 1)
{
$longueur = $Tab_Tiret[$j]
$deuxieme = $Tab_Tiret[$j] + 1
Write-Host (\" debut/longueur/i = 0/{0}/{1}\" -f $longueur,$i) -foregroundcolor blue
$texte = $ligne.Substring(0,$longueur).Replace(\" \",\"\")
$ligne_out = $texte
Write-Host (\" ligne_out = {0}\" -f $ligne_out) -foregroundcolor DarkGreen
$i++
}
ElseIf ($i -eq 1)
{
$longueur = $Tab_Tiret[$j]
$debut = $deuxieme
Write-Host (\" debut/longueur/i = {0}/{1}/{2}\" -f $debut,$longueur,$i) -foregroundcolor blue
$texte = $ligne.Substring($deuxieme,$longueur).Replace(\" \",\"\")
$ligne_out = $ligne_out + \";\" + $texte
$debut = $debut + $longueur + 1
$i++
}
Else
{
$longueur = $Tab_Tiret[$j]
Write-Host (\" ### : {0}\" -f $i)
$texte = $ligne.Substring($debut,$longueur).Replace(\" \",\"\")
$ligne_out = $ligne_out + \";\" + $texte

Write-Host (\" debut/longueur/i = {0}/{1}/{2}\" -f $debut,$longueur,$i) -foregroundcolor red
$debut = $Tab_Tiret[$j] + $debut + 1
Write-Host (\" debut/longueur = {0}/{1}\" -f $debut,$longueur) -foregroundcolor blue
}
}
}
$nbr++
$ligne_out | out-file \"$PATH_CRITIQUE\lansweeper.out\" -append
}


[/code:1]<br><br>Message édité par: Karon, à: 15/01/18 14:49

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 2 mois #24842 par Karon
Réponse de Karon sur le sujet Re:Convertir un tableau
Je suis preneur pour toutes les remarques.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 8 ans 2 mois #24845 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Convertir un tableau
Karon écrit:

Le séparateur de champ est un espace.

Dans ce cas ce contenu, si c'est une date heure, posera pb il me semble :

2014-05-22 15:20:10.203


N'est-ce pas la seconde ligne,nb de tirets, qui détermine la taille des champs et leur nombre ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.066 secondes
Propulsé par Kunena