如何读取已使用“”转换为字符串的多值枚举之间的新行

时间:2017-12-05 04:38:32

标签: ibm-doors

我在我正在工作的模块中有一个枚举类型的多值属性。

外观如下:

// as it appears in the attribute column
val1
vals-2
vals3
// below is what is written in my script to turn the contents this attribute 
// into a string (for this particular object)
string ovp = o."AttribName" // I have assigned it to a string in this manner

如果我打印字符串,它会以列格式打印出来,就像它出现在属性列中一样。如何在此字符串中定义新行?

我想使用新的行定义将每个枚举值放入一个字符串数组( string arr [size],,为清楚起见,因为我可能没有使用正确的术语)。

我确信有一种方法,但我只用了两个星期就使用了DXL,并且对如何做到这一点感到茫然,或者如果有其他方法可以做到这一点可能会更容易。
我已尽可能多地搜索我所知道的关键字。

提前感谢任何帮助或指示。我将继续尝试平均时间,看看我想出了什么。我假设如果我找到答案,我可以用它来更新这个问题。

3 个答案:

答案 0 :(得分:1)

因此,通过查询属性定义然后使用' isMember',可能有更好的方法。 function-但是这样会返回你请求的字符串数组。

Object o = current

string s = o."Test Enum" ""

int x = 0
int y = 0
int size = 0

if ( s != "" ) {
    size++
}
for ( x = 0 ; x < length ( s ) ; x++ ) {
    if ( s [ x ] == '\n' ) {
        size++  
    }

}
string arr[size]
size = 0
for ( x = 0 ; x < length ( s ) ; x++ ) {
    if ( s [ x ] == '\n' ) {
        arr[ size ] = s [ y : x - 1 ]
        y = x + 1
        size++
    }
}
arr[ size ] = s [ y : ]

值得注意的是 - 这首先检查数组的大小,然后定义它。多个选定的属性都有一个&#39; \ n&#39;作为分隔符,但最后一个条目不会有。

答案 1 :(得分:1)

我发现用于字母的方法是使用Regexp。首先,我还要注意,我预先声明我的字符串数组的大小为10,我可以将其减少到5,因为值组似乎永远不会超过4。这就是重点,这是我发现为我的信件所做的工作。

string ovs = o.vs "", ovp = o.vp "", tempstr = ""
Regexp alphabet = regexp"[a-zA-Z]"
int pp, i = 0

for (pp = 0; pp <= length(ovs); pp++) {
    if(alphabet ovs[pp]"")
            tempstr = tempstr "" ovs[pp] ""
    else {
            vsstrarr[i] = tempstr "";
            i++; tempstr = ""
    }
}

这确实有效,但我不知道是否需要多个Regexp变量来捕获非字母,非'\ n'字符。

这是我在此期间提出的解决方案,但我接受Balthos的回答是优越的。

答案 2 :(得分:0)

这里是版本,用于检索布局dxl的所有值:

Skip allEnumValues(AttrDef ad) {
  AttrType at = ad.type

  Skip elements = create
  int i

  for(i = 0; i < at.size; i++) {
    put(elements, i, (string at.strings[i]))
  }

  return elements;
}

Skip getSelectedValues(Object o, string attr, Skip allPossibleValues) {
  Skip selectedValues = create

  int i = 0
  string str
  for str in allPossibleValues do {
    if(isMember(o.attr, str))
      put(selectedValues, i++, str)
  }

  return selectedValues
}

void x(Module m, Object o) {
  string attribute = "HAD_ComponentsASW"
  Skip allValues = allEnumValues(find(m, attribute))
  Skip selectedValues = getSelectedValues(o, attribute, allValues)

  string str
  for str in selectedValues do
    display(str ",")

  delete selectedValues
  delete allValues
}

Module m = current Module
Object o = obj
x(m, o)