Partage
  • Partager sur Facebook
  • Partager sur Twitter

comparaison header csv powershell

Sujet résolu
    22 juillet 2020 à 12:43:16

    Salut à vous,

    Je suis assez nouveau en la matière donc veuillez m'excuser si ma question vous paraît simple 

    Concrètement voici un exemple d'à quoi pourrait ressembler les colonnes de mon CSV

    Ce que je veux c'est tester le nombre de colonne je dois en avoir 4 pour que mon traitement continue

    Et ensuite je veux tester que les noms sont bons donc que COL1 soit bien la même chaine de caractère que COL1

    Je veux implanter ce test au tout debut de mon script dans le cadre d'une fonction de logging que voici 

    COL1;COL2;COL3;COL4
    #Fonction LOG
    #Fonction LOG
     
    $date = get-date -Format dd-MM-yyyy
    $script:fichierlogencours = "Log_$($date).log"
     
    function AddLog([string] $TYPE, [string] $TEXT) 
        {
        $LINE = (Get-Date).ToString("dd/MM/yyyy %H:mm:ss") + "`t" + $TYPE + "`t" + $TEXT
        write-output $LINE | out-file -append -filepath  "$pathlog $fichierlogencours" -force
        if (($TYPE -eq "[Warn]") -or ($TYPE -eq "[INFO]")) {$COLOR="Yellow"}
        elseif ($TYPE -eq "[Err]") {$COLOR="Red"}
        else {$COLOR="Green"}
        Write-Host $LINE -ForegroundColor $COLOR
        } 
     
    #Variables Fonction LOG
     
    
    $PathLog = "C:\Temp\"
    $FilePath = "C:\Temp\TestH.csv"
    $rejets = "C:\Temp\ScriptGenXML_LignesEnErreur.txt"
    
    $liste = Import-Csv -path 'c:\temp\testH.csv' -Delimiter ';'
    $countColonne = ($liste | get-member -type NoteProperty).count
    
    
    Try{
          
        AddLog [INFO] "Traitement du fichier $filepath"
        $TestLog = Get-Content -Path $filepath -ErrorAction Stop    
        AddLog [OK] "Traitement du fichier $filepath OK"
    }
    Catch{
    
        AddLog [Err] "Erreur dans le traitement du fichier $filepath"
        AddLog [Err] "ERREUR : $($error[0].Exception.Message)"
        
    }
     
    ### I tried implementing my if/else in my try but couldn't find a way to stop the script as soon as the number of column not equal to 4
    
     if ($countColonne -eq 4) 
        {AddLog [OK] "nombre do colonne OK"}
        else 
        {AddLog [Err] "Erreur dans le traitement du fichier $filepath, nombre de colonne incorrect devrait être égal à 4"}
    
    et si je mets mon if/else dans mon try cela ne marche pas non plus 
    Bref je bloque Merci de votre aide
    si je rajoute $headers = $liste[1].psobject.Properties.Name come variable je peux récupérer les noms des différents headers mais comment les exploiter

    -
    Edité par HadrienBeaujean 22 juillet 2020 à 12:58:51

    • Partager sur Facebook
    • Partager sur Twitter
      22 juillet 2020 à 14:35:03

      Pour quitter powershell dans le else de ton test sur le nom de colonne, tu peux juste utilisé Exit (à regarder aussi Break et Return, si tu veux juste sortir de ta fonction).

      Tu récupères les valeurs individuelles avec [i] à la suite
      • Partager sur Facebook
      • Partager sur Twitter
        22 juillet 2020 à 14:47:29

        Merci j'ai trouvé d'un manière un peu différente 
        je vous mets le résultat 
         
        $date = get-date -Format dd-MM-yyyy
        $script:fichierlogencours = "Log_$($date).log"
         
        function AddLog([string] $TYPE, [string] $TEXT) 
            {
            $LINE = (Get-Date).ToString("dd/MM/yyyy %H:mm:ss") + "`t" + $TYPE + "`t" + $TEXT
            write-output $LINE | out-file -append -filepath  "$pathlog $fichierlogencours" -force
            if (($TYPE -eq "[Warn]") -or ($TYPE -eq "[INFO]")) {$COLOR="Yellow"}
            elseif ($TYPE -eq "[Err]") {$COLOR="Red"}
            else {$COLOR="Green"}
            Write-Host $LINE -ForegroundColor $COLOR
            } 
         
        ########Variables Fonction LOG######
         
        
        $PathLog = "C:\Temp\"
        $FilePath = "C:\Temp\TestH.csv"
        $rejets = "C:\Temp\ScriptGenXML_LignesEnErreur.txt"
        #$fichierLog       = Join-Path -Path $PathLog -ChildPath ("Log_{0:dd-MM-yyyy}.log" -f (Get-Date))
        $ColonnesAttendues = 'UCB63_DATENUM','U6618_FILENAME','UF6E8_CANAL','U65B8_IDRP'
        $colonnesHeaders = $liste[0].PSObject.properties.name
        
        $continueScript = $true
        
        if ($colonnesHeaders.Count -eq $ColonnesAttendues.Count) {
            Add-Log '[OK]' "Traitement du fichier $filepath OK: No. de colonnes:  $($colonnesHeaders.Count)"
        
            # join the headers into a string for output in the log file
            $colonnesString = "'{0}'" -f ($colonnesHeaders -join "';'")
        
            # test if the headers are as expected (same names, same order)
            if (@(Compare-Object -ReferenceObject $ColonnesAttendues -DifferenceObject $colonnesHeaders -SyncWindow 0).Length -eq 0) {
                Add-Log '[OK]' "Traitement du fichier $filepath OK: Colonnes: $colonnesString."
            }
            else {
                Add-Log '[Err]' "Erreur dans le traitement du fichier $filepath Mauvais nom de colonnes : $colonnesString doit être UCB63_DATENUM;U6618_FILENAME;UF6E8_CANAL;U65B8_IDRP."
                $continueScript = $false
            }
        }
        else {
            Add-Log '[Err]' "Erreur dans le traitement du fichier $filepath, nombre de colonne incorrect devrait être égal à $($ColonnesAttendues)"
            $continueScript = $false
        }
        
        if (!$continueScript) { exit }
        • Partager sur Facebook
        • Partager sur Twitter

        comparaison header csv powershell

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown