none
Faire un select-string à partir du texte contenu dans un textbox RRS feed

  • Question

  • Malgré beaucoup de lecture, sur beaucoup de forums, je ne trouve toujours pas la solution a mon problème.  Je tente d'extraire une section d'un long texte contenu dans un textbox.  Mon code de base ressemble à ceci:

    Select-String  -pattern "SECTION 4" -inputobject $test.text

    Peu importe que je fasse un .tostring de ma variable $test, que je la pipe dans un out-string, elle ne semble jamais reconnu comme tu texte traitable par select-string.  La réponse a mon select-string est toujours mon texte en entiers plutôt que la ligne contenant le texte recherché.  Lorsque je met le contenu de $test dans un fichier texte, je réussi a faire le traitement sans problème.  Qu'est-ce que je ne comprends pas et comment arriver a mes fins sans devoir créer des fichiers texte temporaire? 

    lundi 28 novembre 2016 15:57

Réponses

Toutes les réponses

  • Bonjour,

    Essayer ceci

    $test.text -split "`n" |  Select-String -pattern "SECTION 4"


    • Marqué comme réponse Tortue123 lundi 12 décembre 2016 15:18
    lundi 28 novembre 2016 21:06
  • Hello,

    J'aurais fait la même proposition qu'Emin. Piper ta variable avant.
    Sinon, si cela ne marche pas, d'où provient la textbox ? Peut-on avoir un exemple de comment elle est construite ? Merci.
    mardi 29 novembre 2016 11:57
  • Ça ne fonctionne pas, même résultat, ma variable est inchangée après le traitement
    mardi 29 novembre 2016 15:35
  • Voici nom textbox:

     #textbox des ci-usagers
        $txbciusager = New-Object System.Windows.Forms.TextBox
        $txbciusager.Name = "txbciusager"
        $txbciusager.Location = New-Object System.Drawing.Size(15,60)
        $txbciusager.Size = New-Object System.Drawing.Size(425,250)
        $txbciusager.text = ""
        $txbciUsager.multiline = $true
        $frmMsgbox.Controls.Add($txbciusager)

    mardi 29 novembre 2016 15:37
  • J'ai déjà eu un comportement similaire avec du Windows.Forms en Powershell avec une autre commande.
    Je ne retombe plus sur l'exemple, mais je pense que c'était dans un ForEach ... Bref,

    La variable $txtciusager.text contient une autre variable ou un text brut ?

    Le fait que multiline soit à $true me parait bon. Est-ce que faire un write-host de $txtciusager.text affiche bien le tout sur plusieurs ligne ?  Si le retour est est sur un single line, voilà le problème pour Select-String.

    Je creuserai aussi du coté de :
    CanSelect

    WordWrap

    Ou bien du coté du TextBoxBase.Multiline, peut-être réagira t'il différemment. :-o
    https://msdn.microsoft.com/fr-fr/library/system.windows.forms.textboxbase.multiline(v=vs.110).aspx



    mardi 29 novembre 2016 16:26
  • la variable $txtciusager.text  contient du texte brute et s'affiche sur plusieurs lignes dans un write-host.  Je regarde tes pistes de solution a l'instant
    mardi 29 novembre 2016 16:32
  • Voici ce que me donne mes tests:

            write-host $txbciusager.canselect
            write-host $txbciusager.wordwrap
            write-host $txbciusager.multiline

    me donne:

    $True
    $False
    $True
    Toujours dans la galère

    mardi 29 novembre 2016 17:08
  • Ce mieux que vous puissiez joindre votre script au commentaire. pour qu'on vous aide. 

    Merci,a+


    S'il vous plaît n'oubliez pas de =Marquer comme réponse= les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution. Héritier KANDOLO. http://www.rootandadmin.com/

    mardi 29 novembre 2016 20:41
  • Voici la logique:  En appuyant sur le bouton ok, le texte devrais être remplacé par le résultat de select-string (en espérant ne pas avoir fait de faute de codage en modifiant mon original)

    $test = "
    
    Installation/accès aux logiciel 
    Numéro de demande: blablabla 
    État: Travail en cours 
    Soumises: 22 novembre 2016 - 13:56:35 
    État de l'approbation:  blablabla 
    Date approuvée: 23 novembre 2016 - 17:00:16 
      
    SECTION 1 - PROFIL DU DEMANDEUR 
    ID utilisateur: AAA000 
    Nom:  blablabla,  blablabla- blablabla 
    No de téléphone:  blablabla 
    Région: QUÉBEC 
      
    SECTION 2 - PROFIL DE LA PERSONNE AUTORISÉE 
    État de l'approbation: Approuvée 
    ID utilisateur:  blablabla 
    Nom:  blablabla,  blablabla 
    No de téléphone:  blablabla 
    
      
    SECTION 3 - DÉTAILS SUR LE LOGICIEL 
    Date requise: mer. 23 nov. 2016 
    Nom du logiciel:  blablabla 
    Preuve d'achat:  
      
    SECTION 4 - CLIENT(S) TOUCHÉ(S) 
    1.  blablabla,  blablabla- blablabla 
    ID utilisateur: AAA111 
    Nom:  blablabla,  blablabla-MARIE 
    Code du site:  blablabla 
    Étage: 1 
    Pièce: A14 
    
    
     
      
    2.  blablabla,  blablabla 
    ID utilisateur: AAA111 
    
    
    
     
      
    SECTION 5 - AUTRES COMMENTAIRES 
    Bonjour,
    
    Merci de voir à ce que les employés mentionnés dans cette demande obtienne la mise à jour étant donné que nous aurons à travailler sur des fichiers communs suite à la restructuration du CFSH et nous devons absolument travailler sur la même version afin d'éviter toutes problématiques.
    
    Pour toutes questions, n'hésitez pas à me contacter.
    
    Bonne journée! 
     
    
    " 
    
    function global:MsgboxCloneRights {
    
        $frmMsgbox = New-Object System.Windows.Forms.Form
        $InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState 
        $frmMsgbox.Text = $titre
        $frmMsgbox.Name = "frmMsgbox" 
        $frmMsgbox.DataBindings.DefaultDataSourceUpdateMode = 0 
        $frmMsgbox.ClientSize = New-Object System.Drawing.Size(450,350)
        $frmMsgbox.StartPosition = "WindowsDefaultLocation"
        $frmMsgbox.AutoSizeMode = "GrowAndShrink"
        $frmMsgbox.Topmost = $True 
        $frmMsgbox.KeyPreview = $True
        
        $handler_btnAnnuler =
            {
            $frmMsgbox.close()
            }
    
        $handler_btnOK =
            {
            #Extraction du journal
            $temp = ($txbciusager.text | Select-String  -pattern "SECTION 4") 
            $txbciusager.text = $temp   
            }
    
        #Label question
        $lblQuestion = New-Object System.Windows.Forms.label
        $lblQuestion.Name = "lblQuestion"
        $lblQuestion.Text = "Veuillez inscrire les ci-usagers, séparés par des points-virgules, des utilisateurs auxquels vous désirez effectuer la même modification de droits"
        $lblQuestion.Location = New-Object System.Drawing.Size(15,25) 
        $lblQuestion.Size = New-Object System.Drawing.Size(425,25)  
        $frmMsgbox.Controls.Add($lblQuestion) 
    
        #textbox des ci-usagers
        $txbciusager = New-Object System.Windows.Forms.TextBox
        $txbciusager.Name = "txbciusager"
        $txbciusager.Location = New-Object System.Drawing.Size(15,60)
        $txbciusager.Size = New-Object System.Drawing.Size(425,250)
        $txbciusager.text = $test
        $txbciUsager.multiline = $true
        $frmMsgbox.Controls.Add($txbciusager)
    
        #Bouton OK
        $btnOK = New-Object System.Windows.Forms.Button 
        $btnOK.TabIndex = 3
        $btnOK.Name = "btnOk" 
        $btnOK.Size = New-Object System.Drawing.Size(100,25)   
        $btnOK.UseVisualStyleBackColor = $True
        $btnOK.Location = New-Object System.Drawing.Size(340,315) 
        $btnOK.DataBindings.DefaultDataSourceUpdateMode = 0 
        $btnOK.Text = "Ok" 
        $btnOK.enabled = $true
        $btnOK.add_Click($handler_btnOK)
        $frmMsgbox.Controls.Add($btnOK)
    
        #Bouton Annuler
        $btnAnnuler = New-Object System.Windows.Forms.Button 
        $btnAnnuler.TabIndex = 2
        $btnAnnuler.Name = "btnAnnuler" 
        $btnAnnuler.Size = New-Object System.Drawing.Size(100,25)   
        $btnAnnuler.UseVisualStyleBackColor = $True
        $btnAnnuler.Location = New-Object System.Drawing.Size(230,315) 
        $btnAnnuler.DataBindings.DefaultDataSourceUpdateMode = 0 
        $btnAnnuler.Text = "Annuler" 
        $btnAnnuler.enabled = $true
        $btnAnnuler.add_Click($handler_btnAnnuler)
        $frmMsgbox.Controls.Add($btnAnnuler)
        
        $InitialFormWindowState = $frmMsgbox.WindowState 
        #Init the OnLoad event to correct the initial state of the form 
        $frmMsgbox.add_Load($OnLoadForm_StateCorrection) 
        #Show the Form 
        $frmMsgbox.ShowDialog()| Out-Null
    }
    
    
    MsgboxCloneRights

    mercredi 30 novembre 2016 13:04
  • Personne???
    vendredi 9 décembre 2016 18:42
  • Essayer l'astuce que j'ai mentionnée (ajout du split), elle fonctionne.

            #Extraction du journal
            $temp = ($txbciusager.text -split "`n" | Select-String  -pattern "SECTION 4") 
            $txbciusager.text = $temp   
    dimanche 11 décembre 2016 09:15
  • Effectivement, désolé ça n'avais pas fonctionné lorsque j'avais testé

    Merci beaucoup :)

    lundi 12 décembre 2016 15:19