関数呼び出しを行うための作業コードがありますが、これはハードコードされています。ループを使って動的にする必要があります。上記のコードで配列から分割文字列に基づいて関数呼び出しを作成する方法
function preorder(tree, node, res, child) {
if (node == "")
return
res[res["count"]++] = node
split(tree[node], child, ",")
#This must be made dynamic through looping
#based on number of childs from the elements of the array
preorder(tree,child[1],res)
preorder(tree,child[2],res)
preorder(tree,child[3],res)
}
BEGIN {
tree["1"] = "2,3"
tree["2"] = "4"
tree["3"] = "5"
tree["4"] = "6,7"
tree["5"] = "8,9"
tree["6"] = "10,11,12"
preorder(tree,"1",result)
printf "Child:\n"
for (n = 0; n < result["count"]; n += 1)
{
printf "\t"
printf result[n]" "
printf "\n"
}
printf "\n"
delete result
}
、Iツリー(tree["6"] = "10,11,12"
)、先行順関数必須ループそれを通るという配列の要素6の3つのカンマ区切り値を有しており、各値に対する自己再帰を行うと言います。
preorder(tree,child[1],res)
preorder(tree,child[2],res)
preorder(tree,child[3],res)
は動的にする必要があります。
for (value in splitrecords)
preorder(tree,child[value],res)
私はAWKの初心者です。どんな助け?
が、私を気に、より良い解決策を見つけることができなかったいくつかのものがあります。これは何をしたいですあなたは3つだけを通過している! – karakfa
@karakfaでは、関数で使用されるよりも多くの関数パラメータを宣言することは、awkで関数のローカル変数を使用する方法です。この場合、 'child'パラメータは' preorder'関数の呼び出しで決して使用されません。その値は 'split'関数によって破壊されるからです。 – Jdamian
@realspiritualsはAWKの初心者ではないと思います。ただし、コードをコピーして貼り付けていない限りはありません。 – Jdamian