2016-10-25 1 views
1

Also habe ich gerade festgestellt, dass der aktuelle Filter, den ich verwendet habe, nur richtig funktioniert, wenn die erste gefundene Zeichenfolge falsch ist.DXL DOORs Brauchen Sie Hilfe beim Anwenden eines Filters mit einer Schleife

Module m = current 
Object o = current 
Filter f 

load view "Standard view" 

//column attribute Object Type 
insert(column 3) 
attribute(column 3, "Object Type") 
width(column 3, 100) 

f1 = attribute "Object Type" == "Requirement" 
f2 = attribute "Object Type" == "Derived Requirement" 
f3 = contains(attribute "Object Text", "(Testing) ", true) 

for o in m do 
{ 
f = (f1 || f2) && !(f3) 
} 
set f 
filtering on 
refresh current 

Beispiel: Das wäre meine aktuelle Tabelle (nicht toll, einen Tisch zu machen) sein

ID|  Module Information   |Object Type 
__|______________________________________|____________________ 
1 | (Teting) this is the incorrect format| Requirements 
__|______________________________________|____________________ 
2 | (Testing) this is also correct format| Derived Requirements 
    | (Test) this is incorrect format  | 
__|______________________________________|____________________ 
3 | (Testing) this is the correct format | Requirements 
    | (Testing) this is the correct format | 
__|______________________________________|____________________ 
4 | (Testing) this is the correct format | Requirements 
    | (Teting) this is incorrect format | 
__|______________________________________|____________________ 

Also, wenn ich hier mein Skript auszuführen wäre, würde es mir nur zeigen

ID|  Module Information   |Object Type 
__|______________________________________|____________________ 
1 | (Teting) this is the incorrect format| Requirements 

und nicht das, was ich mir erhofft hatte:

ID|  Module Information   |Object Type 
__|______________________________________|____________________ 
1 | (Teting) this is the incorrect format| Requirements 
__|______________________________________|____________________ 
2 | (Testing) this is also correct format| Derived Requirements 
    | (Test) this is incorrect format  | 
__|______________________________________|____________________ 
4 | (Testing) this is the correct format | Requirements 
    | (Teting) this is incorrect format | 
__|______________________________________|____________________ 

Wie würde ich also die richtige Ansicht zeigen? Ich nehme an, es ist etwas mit Looping zu tun
"Object Text enthält" Filter, aber ich bin mir nicht sicher, wie ich das tun könnte.

+0

Alle Informationen, wie Sie damit fortfahren würden geschätzt –

Antwort

0

Von was ich sagen kann, Ihre DXL funktioniert perfekt. Möglicherweise möchten Sie jedoch Ihre Frage etwas ändern.

Erstens Ihre DXL ob Object Type prüft ist "Anforderung" oder "Abgeleitet Anforderung", während die Testdaten "Requirement s" und "Abgeleitet Anforderung s" hat.

Zweitens Code f = (f1 || f2) && !(f3) wird prüfen, ob der Objekttyp entweder Requirement oder Derived Requirement und auch nicht"(Testing)" enthalten überall innerhalb des Objekts Text. Ihr Code tut dies und gibt Ihnen daher nicht das Ergebnis, das Sie erwarten, da die letzten drei Objekte den Text "(Testing)" enthalten.

Ich gehe davon aus, dass Sie was nach zu prüfen ist, dass nicht alle der Linien "(Testing)" enthalten, wie zu keine gegenüber. In diesem Fall wäre der Code etwa wie folgt:

Module m = current 
Object o = current 
Regexp REGEX_INVALID = regexp2("\\(Testing\\)") 
Regexp REGEX_VALID = regexp2("\\(.*\\)") 
Buffer searchText = create 
Buffer original = create 

//Returns true if Object Text contains any one or more pairs of brackets that do not match (Testing) 
bool filterObjectText(string objText) 
{ 
    searchText = objText 
    original = objText 

    while(REGEX_VALID searchText) 
    { 
     if (REGEX_INVALID searchText) 
     { 
      int offset = null 
      int subStrLength = null 
      findPlainText(tempStringOf(searchText), "(Testing)", offset, subStrLength, true) 
      searchText = searchText[offset + subStrLength:] 
     } 
     else 
     { 
      return true 
     } 
    } 

    return false 
} 

filtering off 

for o in m do 
{ 
    string objectType = o."Object Type" 
    string objectText = o."Object Text" 

    if ((objectType == "Requirements" || objectType == "Derived Requirements") && filterObjectText(objectText)) 
    { 
     accept o 
    } 
    else 
    { 
     reject o 
    } 
} 

filtering on 
refresh current 
Verwandte Themen