none
String bestimmte Stelle ersetzen RRS feed

  • Allgemeine Diskussion

  • Moin,

    ich habe einen Ausgangsstring, der so aussieht: ";;;;"

    Nun lese ich eine Textdatei aus, und wenn bestimmte Dinge in dieser Textdatei gefunden werden, sollen sie an eine bestimmte Stelle in diesem String eingefügt werden. Als Beispiel, wird sagen wir mal dass Wort "Powershell gefunden", soll das dritte Semikolon durch das Wort ersetzt werden, wird "Windows" gefunden, soll das zweite Semikolon durch "Windows" ersetzt werden.

    Ist das irgendwie machbar?

    Mittwoch, 27. Februar 2013 13:50

Alle Antworten

  • Function Replace-WordAtCount {
    
        [CmdletBinding()]
        Param (
            [String]$Text,
            [ValidateRange(0,2147483647)]
            [Int]$Vorkommen,
            [String]$Suchen,
            [String]$Ersetzen        
        )
        
        # Startposition des suchvorganges im String
        $Position = 0
        
        $AnzahlStellenGefunden = 0
        
        # Erste stelle des suchtextes finden
        Do {
            $Position = $Text.IndexOf($Suchen, $Position)
            
            
            If($Position -eq -1){
                #Funktion verlassen wenn nichts mehr gefunden wird ($Position = -1)
                # Der Text wird ohne Ersetzung zurückgegeben
                Return $Text
            }
            Else{
               # $Position ist nicht -1 es wurde etwas gefunden
               # Zähler hochsetzen
               $AnzahlStellenGefunden++ 
            }
                    
            # Testen ob $Vorkommen = $AnzahlStellenGefunden
            If($AnzahlStellenGefunden -eq $Vorkommen) {
          
            
                # an der $Position ersetzen
                
                # text vor der Position ausschneiden
                $Text1 = $Text.Substring(0,$Position)
                # Text nach dem suchtext ausschneiden
                $Text2 = $Text.Substring($Position+$Suchen.Length)
                
                # neuen Text zusammmenkleben und zurückgeben
                Return $Text1 + $Ersetzen + $Text2
    
            }
            
            # an der nächsten Position weitersuchen
            $Position++
            
        } while($True) # endlos schleife wird durch If($Position -eq -1) beendet!
    
    }
    
    # das dritte vorkommen eines Semikolons ersetzen
    Replace-WordAtCount -Text ";;;;" -Suchen ';' -Vorkommen 3 -Ersetzen "JodelHose"
    
    # Das zweite vorkommen von Maria ersetzen
    Replace-WordAtCount -Text "Meine Frau Maria heisst Maria, weil Maria in der Bibel auch Maria hies!" -Suchen 'Maria' -Vorkommen 2 -Ersetzen "Josef"

    Siehe in der String Dokumentation die Methoden!:
    http://msdn.microsoft.com/de-de/library/vstudio/system.string_methods.aspx

    und :
    http://technet.microsoft.com/en-us/library/ee692804.aspx

    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!


    Mittwoch, 27. Februar 2013 16:48
  • Vielleicht sollte man hier erst einmal fragen, was denn wirklich erreicht werden soll.

    Wenn Du bestimmte Zustände erfassen möchtest, wäre es flexibler, wenn Du Objekte anstatt Strings dazu benutzten würdest. Diese lassen sich dann auch einfach in CSV exportieren und wieder importieren.

    $info = New-Object PSObject -Property @{ Windows = $false; PowerShell = $false; Photoshop = $false } 
    $info.PowerShell = $true


    -Raimund

    Mittwoch, 27. Februar 2013 16:57
  • Hast natürlich recht Raimund!
    Da er aber das Semikolon ersetzen will, gehe ich davon aus, das es zumindest nach der Ersetzung keine CSV Daten mehr sind wenn es überhaupt mal welche waren und der OP weiss was CSV bedeutet und ....  ;-))
    Ich beschränkte mich hier einfach auf das direkte beantworten der Frage!

    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Mittwoch, 27. Februar 2013 18:02
  • Ja, Deine Antwort war bestimmt genau das richtige auf die Frage. Manche Fragen wird mir ganz komisch, weil der Ansatz schon krumm klingt.

    Kann aber auch sein, daß der Ansatz völlig korrekt ist und mir das nur eigenartig klingt, weil mir Hintergrundinfos fehlen.


    -Raimund

    Donnerstag, 28. Februar 2013 00:01
  • Gut, was möchte ich machen, ich möchte quasi aus Strings eine Art .csv zusammenbauen, dass ist schon richtig. Vielleicht denke ich auch einfach zu kompliziert und es gibt hier einen einfacheren Ansatz. Danke soweit für die umfangreichen Antworten :-)
    Donnerstag, 28. Februar 2013 08:36
  • Die Worte "Strings" und "eine Art von CSV" sind zu unkonkret!
    Solls jetzt CSV sein oder nicht?
    "Eine Art von .." ist wie: etwas schwanger! Das gibt es nicht!

    Wie sehen die Strings aus?
    Willst du nun was ersetzen oder zusammensetzen? Oder was?
    Versuchs mal deutlicher mit Beispielen!


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!



    Donnerstag, 28. Februar 2013 12:21
  • Hast du dein Problem gelöst oder brauchst du noch Hilfe? Wenn letzteres, dann erkläre bitte noch mal ganz genau mit Beispielen und Hintergrundinfos was du erreichen möchtest. Das ganze hört sich in der Tat so an, als könnte man das auch einfacher lösen.

     

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".

    Mittwoch, 6. März 2013 11:35
    Moderator