kaeckchen
Goto Top

Windows PowerShell - Ein bestimmtes Zeichen in einem Wort in Großschreibung

Hallo werte Gemeinde,

Mittels "ToUpper()" kann ich zwar ein ganzes Wort oder einen ganzen String groß schreiben. Kann ich aber auch ein- oder mehrere, bestimmte Zeichen groß schreiben, so dass die restlichen Zeichen unberührt bleiben?

Beispiel: "muellerm" soll zu "MuellerM" geändert werden

mfG KR

Content-Key: 209033

Url: https://administrator.de/contentid/209033

Printed on: April 26, 2024 at 17:04 o'clock

Member: Snowman25
Snowman25 Jul 03, 2013 at 10:01:10 (UTC)
Goto Top
Hallo @kaeckchen,

klar, wenn du den String davor auseinandernimmst und danach wieder zusammensetzt.
Schreib dir doch 2 Funktionen, welche einen String und eine Position entgegennehmen und dann auf die entsprechende Stelle ein toUpper oder toLower macht.

Gruß,
@Snowman25
Member: kaeckchen
kaeckchen Jul 03, 2013 at 10:35:27 (UTC)
Goto Top
Danke für die Antwort. Das Vorgehen ist klar. Ich hätte die Frage etwas präzisieren müssen. Ich wollte eigentlich erfragen, ob das Ganze in einem Befehl oder in einer Zeile möglich ist.

mfG KR
Member: Snowman25
Snowman25 Jul 03, 2013 updated at 11:22:57 (UTC)
Goto Top
Angenommen, du hast muellerm und möchtest daraus MuellerM machen (1. und letzen Buchstaben groß), dann geht das so:
$name = "muellerm"  
$name = $($name.substring(0,1).ToUpper() + $name.substring(1,($name.Length-2)) + $name.substring($name.Length-1).ToUpper())

Gruß,
@Snowman25
Member: kaeckchen
kaeckchen Jul 03, 2013 at 11:15:52 (UTC)
Goto Top
Hallo und vielen Dank für die Anregung - das funktioniert genau so, wie ich es mir vorstelle.

mfG KR
Member: colinardo
colinardo Jul 03, 2013 updated at 13:50:29 (UTC)
Goto Top
Hallo kaekchen,
und wenn du das Objekt [System.String] mit einer Funktion erweiterst steht dir die Funktion in Zukunft bei jedem String zur Verfügung. Das ganze machst du so :

Zuerst erstellst du eine Datei namens "StringExtension.ps1xml" im Verzeichnis C:\Windows\System32\WindowsPowerShell\v1.0 mit folgenden Inhalt:
<?xml version="1.0" encoding="utf-8" ?>  
<Types>
  <Type>
    <Name>System.String</Name>
      <Members>
        <ScriptMethod>
          <Name>upperFirstandLast</Name>
          <Script>
                $($this.substring(0,1).ToUpper() + $this.substring(1,($this.Length-2)) + $this.substring($this.Length-1).ToUpper())
          </Script>
      </ScriptMethod>
    </Members>
  </Type>
  <Type>
    <Name>System.String</Name>
      <Members>
        <ScriptMethod>
          <Name>toUpperByIndex</Name>
          <Script>
		$index = $args
		$arr = $this.toCharArray()
		$arr[$index] = $arr[$index].toString().toUpper()
		[System.String]::Join($strFinal,$arr)
		$strFinal
          </Script>
      </ScriptMethod>
    </Members>
  </Type>
</Types> 
dann öffnest du dein Powershell Profil-Script(meistens unter "C:\Users\[USERNAME]\Documents\WindowsPowerShell\Microsoft.Powershell_profile.ps1")
wenn die Datei noch nicht vorhanden ist, legst du sie an.
Dann fügst folgende Zeile hinzu und speicherst die Datei:
Update-TypeData -PrependPath "$pshome\StringExtension.ps1xml"  

Ab jetzt ist in jeder neuen Powershell-Session bei jedem [String]-Objekt die Funktion upperFirstandLast() vorhanden die den ersten und letzten Buchstaben groß macht.
Zusätzlich noch die Funktion toUpperByIndex() mit dem man direkt den Index des Buchstabens angeben kann der groß geschrieben werden soll.

Beispiele:
("muellerm").upperFirstandLast()
= MuellerM
("muellerm").toUpperByIndex(1)
= mUellerm

Grüße Uwe
Member: kaeckchen
kaeckchen Jul 03, 2013 at 14:02:40 (UTC)
Goto Top
Vielen vielen Dank Uwe.....

mfG KR