Frage zu c# bzw. #script?
Kennt sich jemand mit #script aus?
Ich habe folgendes Skript:
"Script/DeviceTemplate": {
"Content": "{{var assignments = []}}
{{var nodeId = ServiceTask.DeviceInstallationServiceTask.Details.NodeId}}
{{#each groupName in Typicals.DeviceTypes.xxx.DeviceTypicals[ServiceTask.DeviceInstallationServiceTask.Details.Typical.Name].SignalGroups}}
{{var index = 0}}
{{#each signal in Typicals.DeviceTypes.xxx.SignalGroups[groupName].SignalList}}
{{var baseComponent = ServiceTask.DeviceInstallationServiceTask.Details.Typical.SignalAssignments[groupName].BaseComponent}}
{{var _ = assignments.push({
"assignmentIndex": index,
"deviceId": "" + nodeId,
"sparkplugName": baseComponent + signal.MetricBaseName
})}}
{{index = index + 1}}
{{/each}}
{{/each}}
{{ {
"system": {
"deviceName": nodeId
},
"apps": [
{
"appName": "SPARKPLUG",
"appId": 12345,
"settings": {
"clientId": nodeId,
"keepAliveInterval": 120,
"publishInterval": 120,
"startupDelay": 50
},
"sparkplugSettings": {
"mqttTopic": "spBv1.0",
"sparkplugTopic": "NTN/{MessageType}/" + nodeId
},
"assignments": assignments
}
]
} |> json}}"
}
Dieses hat zwei Schleifen, in der inneren Schleife soll die Variable index um 1 erhöht werden. Alles funktioniert, nur bekomme ich in der Ausgabe für jeden Aufruf von
index = index + 1
ebenfalls eine Ausgabe:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{"system":{"deviceName......
Wie kann ich die Ausgabe von 1 bis 23 unterdrücken?
Dass #Sharp eine grottige Syntax hat, ist mir bewusst. Ich hab's mir aber nicht ausgesucht.
Welche programmiersprache ist das? C# ist definitiv nicht und eine Sprache namens #script gibt es nicht (zumindest findet man nichts wenn man nach dieser sucht).
1 Antwort
Nach einigem suchen habe ich diesen Vergleich zwischen Codezeilen in Razor und #Script gefunden.
Ich kann das zwar gerade nicht testen, allerdings müsste es gehen wenn du
```code
index = index + 1
```
anstelle von
{{index = index + 1}}
schreibst. Soweit ich das verstanden habe wird alles was in {{ }} steht evaluiert und ausgegeben und in den Codeblöcken nur Evaluiert.
Tipp: Anstelle von
index = index + 1
kannst du die Variable direkt inkrementieren mit
index++
lg Suiram1
Ein workaround der mir spontan noch einfällt wäre bei der inneren Schleife nicht die eigentlichen Items durchzugehen, sondern eine Sammlung der indexies und auf deine eigentlichen Items mit diesem zuzugreifen. Also quasi
{{#each index in Enumerable.Range(0, Items.Lenght}}
{{var signal = Items[index]}}
Hierbei ist Items natürlich deine eigentlichen Sammlung (schreibe das jetzt nicht aus, da ich am Handy bin). Das zugreifen auf Item per index müsste noch daran angepasst werden was für eine Sammlung das ist, aber am sonsten müssze das gehen.
Hallo und danke! Ich finde die Syntax von #Sharp schrecklich und ich habe den Eindruck, das wurde im Drogenrausch entworfen. Ich hab mich immer über bash beschwert, aber dies toppt ja alles...
Das mit code hab ich vorher schon probiert, es funktioniert auch nicht. Kann aber sein, dass es an was anderem liegt, denn das ganze Skript ist wieder Teil eines json und möglicherweise kommt man da mit den Sonderzeichen ``` nicht klar. Ich werde das aber nochmals analysieren...
index++ führt jedenfalls zu einem Fehler - das war mein erster Versuch :-=)