问题描述
我的层次结构路径具有不同数量的级别(最多4个):
FACILITIES \ PARK
ROADS \ GRASS/TURF BLVD MAINTENANCE
ROADS \ SIDEWALKS \ REPLACEMENT
FACILITIES \ PARKING - MAIN ST
RECREATION \ BANDSHELL \ PROPERTY \ BUILDING-GENERAL
FACILITIES \ FIREHALL \ PLUMBING
FACILITIES
我想解析_\_
分隔符处的级别,并将值插入Maximo数据库列中:
(这些列的长度现在只有10个。稍后我将创建更长的适当的自定义列。)
我尝试过的事情:
我已经弄清楚了如何解析级别并将值插入列中- IF (这是一个很大的IF),总是有4个级别:>
#Auto-script on WORKORDER
h = mbo.getString("HIERARCHYPATH")
mbo.setValue("woeQ1",(h.split(' \\ '))[0][:10])
mbo.setValue("woeQ2",(h.split(' \\ '))[1][:10])
mbo.setValue("woeQ3",(h.split(' \\ '))[2][:10])
mbo.setValue("woeQ4",(h.split(' \\ '))[3][:10])
但是,我当然不会总是有4个等级。我可以在1-4之间设置任意数量的水平。
如何解析以反斜杠分隔的层次结构路径(具有不同数量的级别)?
解决方法
您可以让“常规”拆分将您的行划分为
double scan_data(char *a,double *b) {
char x;
double y;
int result;
printf("input en operator og hvis relevant,operand: ");
if (scanf("%c,%lf",&x,&y) != 2) {
printf("invalid input\n");
return -1.0;
}
/* Hvis unær output=0,0. */
printf("scan y step 1: %f\n",y);
unary(x,&result); // no info on this function?
if (result == -1) {
y = 0.0;
}
*a = x;
*b = y;
printf("scan b: %f\n",*b);
return 0.0;
}
然后,您可以遍历返回的列表,设置每个值
struct PDFView: View {
var body: some View {
VStack {
ForEach(tasks) { task in
TaskRowView(task: task)
.overlay(
GeometryReader { geo in
// geo.size.height - to get height of current view
})
}
}
.layoutPriority(1)
}
}
如果您需要始终在列表中至少提供4个(或N个)成员,则可以使用>>> s = """\
... FACILITIES \ PARK
... ROADS \ GRASS/TURF BLVD MAINTENANCE
... ROADS \ SIDEWALKS \ REPLACEMENT
... FACILITIES \ PARKING - MAIN ST
... RECREATION \ BANDSHELL \ PROPERTY \ BUILDING-GENERAL
... FACILITIES \ FIREHALL \ PLUMBING
... FACILITIES
... """
>>> for row in s.splitlines():
... print(row.split(" \\ "))
...
['FACILITIES','PARK']
['ROADS','GRASS/TURF BLVD MAINTENANCE']
['ROADS','SIDEWALKS','REPLACEMENT']
['FACILITIES','PARKING - MAIN ST']
['RECREATION','BANDSHELL','PROPERTY','BUILDING-GENERAL']
['FACILITIES','FIREHALL','PLUMBING']
['FACILITIES']
来填写其余值
max_col_length = 10 # to be updated by author
for row in s.splitlines():
for index,atom in enumerate(row.split(" \\ "),1): # count from 1
mbo = "create a new row" # not shown by author
mbo.setValue("WOEQ{}".format(index),atom[:max_col_length])
"INSERT row if processing rows individually"
"INSERT all rows if able to upload them all at the same time"
,
这是我最终使用的脚本(这是@ ti7答案的一种形式)。
在新的层次结构路径少于四个级别的情况下,该脚本将使现有值无效。
Node::Y { nd: nd3,max: max } => {
for m in 0..max - 1 {
match recur(nd3.clone()) {
Ok(y) => return Ok(y),_ => {}
}
}
return Ok(123);
}