Permalänk
Medlem

vbscript rensa dubletter

Jag hämtar in objekt från en databas, och försöker föreänkla villkoret (ta bort alla dubletter och enbart visa det totala villkoret för alla objekt)

ex1 ([111-2222] AND [222-3333]) AND [333-4444]
ex2 [111-2222] AND [222-3333] OR [444-3333]
ex3 [111-2222] AND ([222-3333] OR 333-2222]) AND [123-4567]

vill få det förenklat till [111-2222] AND [222-3333] AND [333-4444] AND [123-4567] OR [444 -3333]
istället för ([111-2222] AND [222-3333]) AND [333-4444]:[111-2222] AND [222-3333] OR [444-3333]:[111-2222] AND ([222-3333] OR 333-2222]) AND [123-4567]

eller utan klamrar "( )"det spelar ingen roll

Kortfattat
-inom klammer [nnn-nnnn] med AND/OR villkor , ibland med ( ) och ibland utan. Beroende på hur användaren har fört in det.
-i värsta fall kan det vara uppåt 50objekt med villkor

Tänkte mig först en ms.Dictionary med [nnn-nnnn] som index och rensa dubletterna men då faller AND, OR villkoren bort
Kommer inte på någon smidig lösning alls.

Hjälp mottages tacksamt

Permalänk
Hedersmedlem

Kan du inte klistra in lite komplett kod? Jag förstår inte exakt vad det är du försöker göra.

Rent generellt känns det dock som att detta är något jag skulle be databasen att göra. De flesta databaser rensar dubbletter i ett kick.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av giplet:

Kan du inte klistra in lite komplett kod? Jag förstår inte exakt vad det är du försöker göra.

Rent generellt känns det dock som att detta är något jag skulle be databasen att göra. De flesta databaser rensar dubbletter i ett kick.

Det är inte dubletter på objekten utan ett värde på objektet, objekten behöver också dessa värden då man kan hämta in dom separat. Problemet blir om man ska hämta in ett stort antal objekt och försöker printa ut villkoren, det kan lätt bli en A4

Det jag vill är alltså att sammanställa villkoren som krävs för dom valda objekten oavsett om det är 1 eller 100 objekt.
Orkar inte skriva någon fungerande kod då jag inte vet hur jag ska gå vidare men som exemplet nedan bör förklara hur jag tänkter nu och varför mitt tankesätt inte fungerar? :).

Dim dicObjStr Set dicObjStr = CreateObject("Scripting.Dictionary") dicObjStr.Add "1", "([100-1234] AND [100-4321]) OR [200-1234]" dicObjStr.Add "2", "[200-1234]" dicObjStr.Add "3", "[100-1234] OR [200-1234]" dicObjStr.Add "4", "[555-5555]" For Each x In dicObjStr 'eventuellt splitta strängen orkar inte skriva koden då jag tror att det är fel väg att gå nyStr = Split(dicObjStr(x), "]", 1]) Next ' Loopa igenom For Each x In nyStr 'nyStr , ser inte ut såhär men tanken ligger åt det hållet '[100-1234]:[100-4321]:[200-1234]:[200-1234]:[100-1234] ......... fin kod som plockar bort dubletter 'resulat = [100-1234]:[100-4321]:[200-1234] ' inga AND / OR villkort med behöver få ut [100-1234] AND [100-4321] OR [200-1234] Next

Permalänk
Hedersmedlem

Det borde inte vara så stort problem att göra så som du börjat, men lägga alla strängarna med [ ] i en array och sedan rensa den på dubbletter genom att bara sätta dem till en tom sträng eller något och sedan loopa igenom värdena en gång till för att sammanställa resultatet.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem
Skrivet av giplet:

Det borde inte vara så stort problem att göra så som du börjat, men lägga alla strängarna med [ ] i en array och sedan rensa den på dubbletter genom att bara sätta dem till en tom sträng eller något och sedan loopa igenom värdena en gång till för att sammanställa resultatet.

Split lägger strängarna i en array, problemet är and or vilkoren

Permalänk
Hedersmedlem

Du kan använda regular expressions för att hitta strängarna.
http://www.regular-expressions.info/vbscript.html

Här är ett uttryck för att hitta strängar på formen [000-0000]

(?<Number>\[\d{3}-\d{4}\])

Number är bara namnet jag gav värdet som ska fångas. Du kan döpa om det till vad som helst.

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem

Tja

Funderade på left och right för [ ] för att hitta positionerna med matchning, men det kanske blir smidigare att göra så där.
Tror att man kan lägga till allting i en dictionary och använda strängen som index namn, tror att den skriver över utan att gnälla så då slipper jag leta/rensa.
Men tror fortfarande att jag är körd på AND , OR villkoren som måste finnas med när det ska bygga ihop igen :/

Permalänk
Hedersmedlem
Skrivet av lappen81:

Tja

Funderade på left och right för [ ] för att hitta positionerna med matchning, men det kanske blir smidigare att göra så där.
Tror att man kan lägga till allting i en dictionary och använda strängen som index namn, tror att den skriver över utan att gnälla så då slipper jag leta/rensa.
Men tror fortfarande att jag är körd på AND , OR villkoren som måste finnas med när det ska bygga ihop igen :/

Är du säker på att denna övningen ger något faktiskt värde. Blandar du in AND och OR så blir det hela mycket mer komplext att analysera än bara ifall det finns dubbletter eller ej. Hur går du med följande uttryck?
(A AND B) OR (A AND C) OR (B AND C)

Visa signatur

Använd gilla för att markera nyttiga inlägg!

Permalänk
Medlem

Yes, trodde att jag var tydlig med att det var AND, OR jag hade kört fast på? Och därför jag inte har skrivit någon kod

I det fallet så ser jag utrycket som förenklat, i databasen skulle det kunna ha varit en mix med vissa som har enbar A, eller C, eller (A AND B) osv, osv.

Permalänk
Medlem

[A] AND [B] AND [D] AND ([E] OR [F] OR [G])
[B] AND [C] AND [D] AND ([E] OR [F] OR [G])

bör bli
[A] AND [B] AND [C] AND [D] AND ([E] OR [F] OR [G])