Announcement

Collapse
No announcement yet.

Vergleichsoperator mit Stringmenge

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Vergleichsoperator mit Stringmenge

    Hallo,

    Ich suche nach einer Möglichkeit, eine Menge an Strings in einem einzigen Vergleichsoperator zu übergeben. Hierzu möchte ich vbscript verwenden.

    Beispiel:
    geprüft werden zeichenkette "abc", "def", "ghi", "asd","234" und "123". Jetzt soll geprüft werden, ob Variable str_A einen dieser Strings enthält.

    Code:
    Dim str_A as String
    
    If str_A = "abc" or str_A="def" or str_A="ghi" or str_A="asd" or str_A="234" or str_A="123" then
    [...]
    End If
    Gibt es eine Code Formulierung, mit der man die Strings als Menge an den Vergleichsoperator übergeben kann?

  • #2
    Hallo,

    setze die Strings in eine Menge: Wenn du es als Array machst, bekommst du mit IndexOf >= 0 die passende Feststellung. Bei List Of String gibt es auch Contains.

    Gruß Jürgen

    Comment


    • #3
      Vielen Dank für die schnelle Antwort!

      Das Problem ist, das ich das ganze in VBScript realisiere. Da ich kein passendes Forum gefunden habe habe ich das Thema hier erstellt. Wenn deine Lösung auch in VBScript realisierbar ist, wäre das Perfekt.

      Comment


      • #4
        Hallo,

        ob Variable str_A einen dieser Strings enthält.
        Mit LINQ (to Objects) kann das beispielhaft so umgesetzt werden:
        [highlight=vbnet]
        Imports System
        Imports System.Collections.Generic
        Imports System.Linq

        Namespace ConsoleApplication1
        Class Program
        Private Shared Sub Main(ByVal args As String())
        Dim liste As New List(Of String)()

        Dim str_A As String = "1abcy"

        Dim query = From s In liste _
        Where str_A.Contains(s) _
        Select s

        Dim prüfung As Boolean = query.Count() > 0

        Console.WriteLine(prüfung)
        Console.ReadKey()
        End Sub
        End Class
        End Namespace
        [/highlight]
        Sonst die Möglichkeit per ForEach-Schleife.

        Soll jedoch geprüft werden ob str_A in der Liste enthalten ist dann -> Jürgens Antwort.

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Das Problem ist, das ich das ganze in VBScript realisiere.
          Wäre hilfreich das vorher zu erwähnen!
          Zuletzt editiert von Ralf Jansen; 04.06.2009, 10:44. Reason: Sorry. Hattest du erwähnt.

          Comment


          • #6
            Hierzu möchte ich vbscript verwenden.
            Hab ich auch überlesen - stand aber da.

            Probier ob es geht - wenn nicht iteriere mit ForEach-Next über den Array und prüfe mit IF ...

            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Vielen Dank für die vielen Ansätze!

              For each wäre eine Möglichkeit, nur leider wird der Code hierdurch unübersichtlicher. Die eigentliche Abfrage ist etwas komplexer als mein Beispiel:

              [highlight=vb]
              If v_invtyp <> 2 and pospayment <> 1 and (CDblNull(v_postype) = 1 or CDblNull(v_postype) = 8) and ( CDblNull(v_posexcl) <> 0 or CDblNull(itemquantity) <> 0 or ( CDblNull(v_postype) <> 1 and CDblNull(v_postype) <> 8 and CDblNull(v_postype) <> 9) ) then
              [...]
              End If
              [/highlight]

              (EDIT: Die CDblNull() Funktion ist eine selbst geschriebene Funktion, die NULL oder "" durch 0 ersetzt)
              Zuletzt editiert von MrM^; 04.06.2009, 11:13. Reason: Furchtbare Rechtschreibfehler.

              Comment


              • #8
                Wenn es dir um Lesbarkeit geht solltest du denn Dingen sprechende Namen(den Variablen und den Konstanten) geben und die einzelnen Vergleiche in Methoden mit sprechenden Namen auslagern.

                Code:
                If IsPaymentTypeValid(paymentType) and
                   IsPaymentRequired(paymentItem) then
                  AuthorizePayment()
                End If

                Comment


                • #9
                  Originally posted by Ralf Jansen View Post
                  Wenn es dir um Lesbarkeit geht solltest du denn Dingen sprechende Namen(den Variablen und den Konstanten) geben und die einzelnen Vergleiche in Methoden mit sprechenden Namen auslagern.

                  Code:
                  If IsPaymentTypeValid(paymentType) and
                     IsPaymentRequired(paymentItem) then
                    AuthorizePayment()
                  End If
                  An die Bezeichnungen bin ich leider gebunden, der Code ist Teil eines sehr großen Systems. Mit der Bezeichnung gebe ich dir recht, die Namen hätte ich auch nicht so gewählt

                  EDIT: In SQL gibt es die möglichkeit mit eckigen klammern eine Zeichenmenge an die LIKE Klausel zu übergeben. Gibt es eine ähnliche Funktion in VBScript?
                  Zuletzt editiert von MrM^; 04.06.2009, 13:18.

                  Comment


                  • #10
                    Originally posted by MrM^ View Post
                    Hierzu möchte ich vbscript verwenden.
                    Entschuldigung, das hatte ich ebenfalls überlesen. Jürgen

                    Comment

                    Working...
                    X