ノードのループ
for ループを使用して、ストリーム内のすべてのノードをループできます。例えば、以下のスクリプト例はすべてのノードをループし、フィルター・ノードにおけるフィールド名を大文字に変更します。
除外されるフィールドが何もなくても、このスクリプトはフィルター・ノードを持つどのようなストリームにおいても使用できます。フィールド名を全面的に大文字に変更するには、すべてのフィールドを渡すフィルター・ノードをただ単に追加するだけです。
# Alternative 1: using the data model nameIterator() function
stream = modeler.script.stream()
for node in stream.iterator():
if (node.getTypeName() == "filter"):
# nameIterator() returns the field names
for field in node.getInputDataModel().nameIterator():
newname = field.upper()
node.setKeyedPropertyValue("new_name", field, newname)
# Alternative 2: using the data model iterator() function
stream = modeler.script.stream()
for node in stream.iterator():
if (node.getTypeName() == "filter"):
# iterator() returns the field objects so we need
# to call getColumnName() to get the name
for field in node.getInputDataModel().iterator():
newname = field.getColumnName().upper()
node.setKeyedPropertyValue("new_name", field.getColumnName(), newname)
このスクリプトは現在のストリーム内のすべてのノードをループし、各ノードがフィルターであるかどうかをチェックします。ノードがフィルターである場合、そのノードの各フィールドをループし、field.upper() 関数または field.getColumnName().upper() 関数を使用して、名前を大文字に変更します。