我在我正在工作的模块中有一个枚举类型的多值属性。
外观如下:
// 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,并且对如何做到这一点感到茫然,或者如果有其他方法可以做到这一点可能会更容易。
我已尽可能多地搜索我所知道的关键字。
提前感谢任何帮助或指示。我将继续尝试平均时间,看看我想出了什么。我假设如果我找到答案,我可以用它来更新这个问题。
答案 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)