2017-11-24 1 views
1

Unter Verwendung ist ein Ausdruck, den ichmehrere VB Mid-Funktionen auf einem Parameter in SSRS

dh "text\[forename] [Surname]"

im Moment dieser Ausdruck geeignet ist, wenn „“ die Vornamens von einer Benutzer-ID zu ziehen verwende ist zwischen dem Vor- und Nachnamen. Was ich jedoch bemerkt habe ist, dass "" durch "ersetzt werden kann." oder "/" oder "_" zum Beispiel.

Das Problem, das ich habe, ist die Einbeziehung mehrerer "Mid" -Funktionen, um alle diese Optionen einzuschließen. Ich habe versucht, "Or", "Switch" und eine Reihe anderer Operatoren ohne Effekt zu verwenden.

Ich verwende kein Dataset, sondern einen Parameter im Bericht. Wenn sich ein Benutzer am Bericht anmeldet, wird seine Benutzer-ID als Parameter verwendet.

Fehle ich etwas offensichtliches oder habe ich die Marke komplett verpasst?

Jede Hilfe würde sehr geschätzt werden.

= "Hi " + Mid(Parameters!User.Value, InStr(Parameters!User.Value,"\")+1, (InStr(Parameters!User.Value, " ") - InStr(Parameters!User.Value, "\") - 1)) + "," & 
chr(10) & chr(13) & 
chr(10) & chr(13) & 
"You have access to the Teams listed below. Only data from these teams will be shown in any analysis. Please click above to continue to the Dashboards" 
+0

Nicht auf eine Zeile setzen ... Sie können auf regulären Ausdruck aussehen. –

Antwort

0

Regex ist definitiv der Weg für so etwas. Hier ist ein Beispiel dafür, wie Sie die Vornamens mit regex herausziehen könnte:

Dim input As String = Parameters!User.Value 
Dim pattern As String = "(?<=\\)[^ ./_]+" 
Dim forename As String = Regex.Match(input, pattern).Value 
Dim output As String = $"Hi {forename}, 

You have access to the Teams listed below. Only data from these teams will be shown in any analysis. Please click above to continue to the Dashboards" 

VB.NET erlaubt nun mehrzeiligen Stringliterale, so gibt es keine Notwendigkeit Chr(10) & Chr(13) zu verwenden. Selbst wenn Sie kein mehrzeiliges Literal verwenden, ist es besser, Environment.NewLine oder vbCrLf zu verwenden, je nach Ihren Bedürfnissen. Die $ vor dem String-Literal macht es zu einer interpolierten Zeichenfolge, was bedeutet, dass Sie Variablenwerte in {} Klammern in der Mitte der Zeichenfolge einfügen können. Wenn Sie wollen, dass nicht verwenden, könnten Sie einfach verketten, wie Sie, bevor Sie wurden:

Dim output As String = "Hi " & forename & 
    Environment.NewLine & 
    Environment.NewLine & 
    "You have access to the Teams listed below. Only data from these teams will be shown in any analysis. Please click above to continue to the Dashboards" 

Regex ist ein leistungsfähiges Werkzeug für die Suche, Parsen und Strings zu verwandeln. Wenn Sie viel mit Daten arbeiten, wird es sich lohnen, sie zu lernen.

Wenn Sie Regex nicht verwenden möchten, würde ich empfehlen, String.Split zu verwenden, da diese Methode Ihnen ermöglicht, eine beliebige Anzahl von Trennzeichen zu übergeben. Zum Beispiel könnten Sie so etwas tun:

Dim input As String = Parameters!User.Value 
Dim parts() As String = input.Split("\"c, " "c, "."c, "/"c, "_"c) 
Dim forename As String = If(parts.Length >= 2, parts(1), Nothing) 
+0

In Bezug auf die Verwendung einer 'IIF()' Aussage, ist dies auch ein möglicher Weg zu gehen? Oder diese Methode zu ineffizient? –

+0

Hoppla. Vielen Dank @NicoButler, um mich darauf aufmerksam zu machen. Sie haben mich veranlasst, die ursprüngliche Frage noch einmal zu lesen, was mir klar machte, dass ich das Problem falsch verstanden hatte. Ich dachte, dass es der Schrägstrich wäre, der andere Charaktere sein könnte, aber es war der Raum. Ich habe das Regex-Muster aktualisiert, damit es richtig funktioniert. Ich fügte auch ein Beispiel hinzu, wie es ohne Regex gemacht werden könnte. 'IIF' (oder besser noch, nur der neuere ternäre' If' Operator in VB.NET) würde sicherlich funktionieren, aber ich befürchte, dass es ein bisschen lang und unlesbar werden würde. Es wäre auch schwieriger, in Zukunft mehr Flexibilität hinzuzufügen. –

Verwandte Themen