marcoborn
Goto Top

Code-Optimierung

Hallo Forum,
ich habe zur Zeit etliche Stellen in meinem Code, wo ich eine Variable mit etlichen Strings vergleichen muss. Kurzes Beispiel:

Dim Variable1 as String = "[C]"  
...
If Variable1 = "A" OrElse Variable1 = "B" OrElse Variable1 = "I" OrElse Variable = "N" OrElse Variable = "P" then  
  'Mache etwas  
End If

In dem Beispiel muss ich also prüfen, ob die Variable eine der Werte A, B, I, N oder P annimmt. Gibt es eine Möglichkeit, diese Abfragen z.B. durch reguläre Ausdrücke, zu vereinfachen? Die Aktionen, die durchzuführen sind, wenn eine der Bedingungen erfüllt ist, sind für alle Bedingungen identisch.

Vielen Dank im voraus,
M. Born

Content-Key: 366083

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

Printed on: April 19, 2024 at 18:04 o'clock

Mitglied: 135333
Solution 135333 Feb 26, 2018 updated at 14:19:52 (UTC)
Goto Top
Sicher
Imports System.Text.RegularExpressions

Dim r as Regex = new Regex("^[ABINP]$")  
If r.Match(Variable1).Success then
    'mache etwas  
End if
Gruß Snap
Member: MarcoBorn
MarcoBorn Feb 26, 2018 at 14:15:57 (UTC)
Goto Top
Vielen Dank. Ich werde das mal testen.
Würde das auch funktionieren, wenn die Variablen aus 1 oder mehreren Buchstaben bestehen, z.B. "A", "B", "BJ", "BK"?
Wie würde man die einzelnen Variablen trennen?

Viele Grüße,
M. Born
Member: emeriks
Solution emeriks Feb 26, 2018 updated at 14:18:59 (UTC)
Goto Top
Oder Oldschool mit Select Case
Dim Variable1 as String = "[C]"  
...
Select Case Variable1 
  Case "A", "B", "I", "N", "P"  
    'Mache etwas  
  Case  "X", "Y", "Z"  
    'Mache dies  
  Case ...

  Case Else

End Select
Mitglied: 135333
Solution 135333 Feb 26, 2018 updated at 14:21:22 (UTC)
Goto Top
Zitat von @MarcoBorn:

Vielen Dank. Ich werde das mal testen.
Würde das auch funktionieren, wenn die Variablen aus 1 oder mehreren Buchstaben bestehen, z.B. "A", "B", "BJ", "BK"?
Jepp
new Regex("^([ABINP]|BJ|BK)$")   
Einfach mal RegularExpressions lernen face-smile
Member: emeriks
Solution emeriks Feb 26, 2018 at 14:23:37 (UTC)
Goto Top
Eine Anmerkung zu RegEx:
Wenn man das beherrscht, dann ist das augenscheinlich "eleganter". Wenn man das jedoch nicht beherrscht, nur gelegentlich einsetzt, und dann auch nur mit Hilfe - so wie ich meist - dann ist das eher hinderlich, wenn man mal nach längerer Zeit wieder in den Code schaut und dann nicht sofort erfasst, was da eigentlich abgeht.
Member: MarcoBorn
MarcoBorn Feb 26, 2018 at 14:30:34 (UTC)
Goto Top
Mir geht es leider auch so. Aber leider habe ich diese Prüfungen etliche Male im Code und das mit deutlich mehr Vergleichen als hier im Beispiel geschildert. Und da mein Makro teilweise mehr als 30 Minuten braucht möchte ich solche Zeitfresser möglichst eliminieren. Daher will ich mal RegEx testen und prüfen, ob sich so die Durchlaufzeit spürbar reduziert.
Member: MarcoBorn
MarcoBorn Feb 26, 2018 at 14:56:05 (UTC)
Goto Top
Ich habe den Code von Snapdragon etwas abgewandelt und es scheint in einem kleinen Beispiel zu funktionieren. Hier die von genutzte Variante:
new Regex("^([A]|[B]|[I]|[N]|[P]|[BJ]|[BK])$")   
Ob das Ganze wirklich Performance-steigernd ist, muss ich jetzt mit meinem Tool noch testen.
Mitglied: 135333
135333 Feb 26, 2018 updated at 15:07:18 (UTC)
Goto Top
Ich hoffe die Eckigen Klammern willst du nicht Matchen face-smile denn die haben in einem Regex besondere Bedeutung und kennzeichnen ein Set von Zeichen. Willst du diese selbst Matchen must du sie mit Backslash escapen !!! \[ und \]
Also für dich dann
new Regex("^\[([ABINP]|BJ|BK)\]$")   

Ein fortgeschrittener Programmierer der Regex nicht aus dem FF beherrscht, gibt's das noch face-smile??
Member: MarcoBorn
MarcoBorn Feb 26, 2018 at 15:13:49 (UTC)
Goto Top
Ja, sowas solls geben. face-smile Bisher habe ich sie noch nie gebraucht, da ich immer in anderen Bereichen unterwegs war. Und mit VB.NET beschäftige ich mich auch noch nicht so lange.
Mitglied: 135333
Solution 135333 Feb 26, 2018 updated at 15:50:57 (UTC)
Goto Top
Ich würde mich damit trotzdem mal beschäftigen, erstens wenn du einmal Blut geleckt hast willst du es nie mehr missen, zweitens ist das eigentlich nicht sonderlich schwer wenn man mal dahinter gestiegen ist, schau dir mal das Tutorial an. In zwei drei Stunden mit etwas Üben kommt man da schon ziemlich weit. Zusätzlicher Vorteil: Du kannst es so gut wie überall nutzen, sei es in so gut wie jeder guten Skript und Programmiersprache die Bash mit sed und grep etc. pp. Gerade wenn man Dinge in Texten sucht die man sonst ohne Hilfe von Regex nicht oder nur sehr sehr umständlich realisieren würde hilft es ungemein.

Viel Spaß beim "Rexen" face-wink
Member: MarcoBorn
MarcoBorn Feb 26, 2018 at 15:55:11 (UTC)
Goto Top
Vielen Dank für den Link. Es interessiert mich schon, aber bisher hatte ich noch nicht wirklich den Bedarf daran und leider auch nicht genug Zeit, mich damit zu befassen, da andere Themen immer wichtiger und dringender waren...