Benutzer mit den meisten Antworten
String erweitern

Frage
-
Hallo zusammen,
ich habe einen String: d,16,cc,f9,61,70,d2,4f,ae,db,a7,4f,df,a,3b,5
Überall, wo nur ein Buchstabe oder eine Zahl steht, soll eine 0 vorangestellt werden. D.h., wie schaffe ich es daraus 0d,16,cc,f9,61,70,d2,4f,ae,db,a7,4f,df,0a,3b,05 zu machen?
Ein einfacher Replace bringt mir nichts, da die Zeichen unterschiedlich sind und in einem anderen String an unterschiedlichen Stellen stehen können.
VG
Antworten
-
Eigentlich ganz einfach: Du zerlegst den langen String einfach an den Kommata in Einzelstrings ... Du splittest ihn also. Dann kannst Du alle Einzel-Strings auf ihre Länge prüfen und wenn die nur 1 ist, dann hängst Du vorne eine Null an. Dann verbindest Du die Einzelstrings wieder zu einem Großen ... Du joinst sie also wieder.
Best regards,
(79,108,97,102|%{[char]$_})-join''
- Als Antwort markiert Gahmuret Freitag, 9. März 2018 09:36
-
Oder mit ein bischen Regex-Magic ;-) :
"d,16,cc,f9,61,70,d2,4f,ae,db,a7,4f,df,a,3b,5" -replace '(^|,|\G)([a-z]|[0-9])($|,)','${1}0${2}${3}'
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Code Manager v5: Link
(u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.
- Bearbeitet Denniver ReiningMVP, Moderator Dienstag, 6. März 2018 01:23 Regex gekürzt
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 9. März 2018 23:08
-
Geht es nicht auch einfacher? Oder übersehe ich da was?
"d,16,cc,f9,61,70,d2,4f,ae,db,a7,4f,df,a,3b,5" -replace "\b([a-z0-9])\b", '0$1'
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 9. März 2018 23:08
-
Na jetzt geht's aber los hier. :-D ... ich hab auch noch einen mit regex als Ergänzung zu Deinem:
"d,16,cc,f9,61,70,d2,4f,ae,db,a7,4f,df,a,3b,5" -replace "\b(\w)\b", '0$1'
Best regards,
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Dienstag, 6. März 2018 07:22
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 9. März 2018 23:08
Alle Antworten
-
Eigentlich ganz einfach: Du zerlegst den langen String einfach an den Kommata in Einzelstrings ... Du splittest ihn also. Dann kannst Du alle Einzel-Strings auf ihre Länge prüfen und wenn die nur 1 ist, dann hängst Du vorne eine Null an. Dann verbindest Du die Einzelstrings wieder zu einem Großen ... Du joinst sie also wieder.
Best regards,
(79,108,97,102|%{[char]$_})-join''
- Als Antwort markiert Gahmuret Freitag, 9. März 2018 09:36
-
Oder mit ein bischen Regex-Magic ;-) :
"d,16,cc,f9,61,70,d2,4f,ae,db,a7,4f,df,a,3b,5" -replace '(^|,|\G)([a-z]|[0-9])($|,)','${1}0${2}${3}'
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Code Manager v5: Link
(u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.
- Bearbeitet Denniver ReiningMVP, Moderator Dienstag, 6. März 2018 01:23 Regex gekürzt
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 9. März 2018 23:08
-
Spielverderber! Ich wollte wenigstens warten bis er sich wieder meldet. ;-) ... aber wenn wir jetzt schon beim Basteln sind - ich bin auf das hier gekommen:
('d,16,cc,f9,61,70,d2,4f,ae,db,a7,4f,df,a,3b,5' -split ',' | ForEach-Object {$_ -replace '^(.)$',"0`$1"} ) -join ','
Best regards,
(79,108,97,102|%{[char]$_})-join''
-
Auch schön. Aber mit zwei Befehlen und Pipeline.. pfff kann ja jeder. ;-)
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Code Manager v5: Link
(u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort. -
Geht es nicht auch einfacher? Oder übersehe ich da was?
"d,16,cc,f9,61,70,d2,4f,ae,db,a7,4f,df,a,3b,5" -replace "\b([a-z0-9])\b", '0$1'
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 9. März 2018 23:08
-
Ein etwas variablerer Weg wäre die Benutzung der String.PadLeft-Methode:
("d,16,cc,f9,61,70,d2,4f,ae,db,a7,4f,df,a,3b,5" -split "," | foreach{$_.padleft(2,"0")}) -join ","
Damit kann man auf beliebige Länge erweitern und das dafür verwendete Zeichen wählen.
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 9. März 2018 23:08
- Tag als Antwort aufgehoben Denniver ReiningMVP, Moderator Freitag, 9. März 2018 23:08
-
Na jetzt geht's aber los hier. :-D ... ich hab auch noch einen mit regex als Ergänzung zu Deinem:
"d,16,cc,f9,61,70,d2,4f,ae,db,a7,4f,df,a,3b,5" -replace "\b(\w)\b", '0$1'
Best regards,
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Dienstag, 6. März 2018 07:22
- Als Antwort markiert Denniver ReiningMVP, Moderator Freitag, 9. März 2018 23:08
-
Na jetzt geht's aber los hier. :-D
OK, fehlt noch das Wort zum Sonntag ;-)
Gemittelt über 10 Durchgänge über jeweils 10.000 Strings, jedes bestehend aus 12 Elementen, ergibt sich das folgende Performance-Bild (in Millisekunden):
Olafs RegEx: 116.36045 Christophs RegEx: 102.25861 Dennivers RegEx: 115.44516 PadLeft: 1945.05935
Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> https://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com
In theory, there is no difference between theory and practice. In practice, there is.
-
Wenn ich gewusst hätte, das das ein Wettbewerb wird... :)
Sollten wir vielleicht öfters mal veranstalten. Posh-Regex-Games oder so...Ich hoffe nur wir haben den OP nicht komplett abgehängt. Gahmuret?
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Code Manager v5: Link
(u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort. -
Damit habe ich es geschafft, sowohl die schnellste als auch die langsamste Lösung vorzuschlagen. Das hat auch irgendwie was. ;-)
Naja, die von Olaf ursprünglich in Form einer Textaufgabe vorgeschlagene explizite Prüfung der Länge wäre vermutlich noch etwas langsamer geworden ;-)Evgenij Smirnov
I work @ msg services ag, Berlin -> http://www.msg-services.de
I blog (in German) @ http://it-pro-berlin.de
my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
Exchange User Group, Berlin -> https://exusg.de
Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com
In theory, there is no difference between theory and practice. In practice, there is.
-
Na klar ... jetzt war ich's wieder. ;-) Ich wollte ja eigentlich Gahmuret nur dazu animieren, mit dem Coden erstmal anzufangen. Jetzt haben wir ihm das ja schon alles abgenommen. Ich hab halt den pädagogischen Aspekt immer noch im Hinterkopf. .... und manchmal ist die Geschwindigkeit auch gar nicht so wichtig. :-P ... so.
Best regards,
(79,108,97,102|%{[char]$_})-join''
-
Wow...hier geht es ja ab. Durch die Flut der Antworten bin ich leider nicht dazu gekommen alle durchzulesen, es scheint aber, als wäre das für alle Beteiligten recht kurzweilig gewesen.
Frei nach dem Motto: alle Wege führen nach Rom, gehe ich davon aus, dass alle mit ihren Antworten Recht haben! :-)
Aber ernsthaft, vielen Dank für die Antworten. Nr 1 hat mir schon auf die Sprünge geholfen.
Beste Grüße