# String format
Formats a text string from an input pattern, substituting {} placeholders with input values. Output is deferred until the pattern and all required values have been received, preventing incomplete messages.
String format
P
1
2
3
4
T
# Inputs
| ID | Abbrev | Name | Type | Default | Description |
|---|---|---|---|---|---|
pattern | P | Pattern | STRING | | Format pattern string. Use {} as a placeholder for each input value in order (e.g. "Temperature: {} C, Humidity: {} %"). Can be provided by a String constant block. |
v1 | 1 | Value 1 | STRING | | First value to substitute into the pattern. |
v2 | 2 | Value 2 | STRING | | Second value to substitute into the pattern. |
v3 | 3 | Value 3 | STRING | | Third value to substitute into the pattern. |
v4 | 4 | Value 4 | STRING | | Fourth value to substitute into the pattern. |
# Outputs
| ID | Abbrev | Name | Type | Default | Description |
|---|---|---|---|---|---|
text | T | Text | STRING | | The formatted text string with placeholders replaced by input values. |
# Configuration
| ID | Name | Type | Default | Unit | Description |
|---|---|---|---|---|---|
trigger_on_pattern | Trigger on pattern | BOOLEAN | false | When enabled, changing the pattern input triggers output recalculation. When disabled, pattern changes are captured silently. | |
trigger_on_v1 | Trigger on V1 | BOOLEAN | true | When enabled, changing Value 1 triggers output recalculation. When disabled, value changes are captured silently. | |
trigger_on_v2 | Trigger on V2 | BOOLEAN | true | When enabled, changing Value 2 triggers output recalculation. When disabled, value changes are captured silently. | |
trigger_on_v3 | Trigger on V3 | BOOLEAN | true | When enabled, changing Value 3 triggers output recalculation. When disabled, value changes are captured silently. | |
trigger_on_v4 | Trigger on V4 | BOOLEAN | true | When enabled, changing Value 4 triggers output recalculation. When disabled, value changes are captured silently. |
# State
| ID | Name | Type | Default | Unit | Description |
|---|---|---|---|---|---|
has_pattern | Pattern received | BOOLEAN | false | Tracks whether the pattern input has been received at least once. | |
has_v1 | Value 1 received | BOOLEAN | false | Tracks whether the v1 input has been received at least once. | |
has_v2 | Value 2 received | BOOLEAN | false | Tracks whether the v2 input has been received at least once. | |
has_v3 | Value 3 received | BOOLEAN | false | Tracks whether the v3 input has been received at least once. | |
has_v4 | Value 4 received | BOOLEAN | false | Tracks whether the v4 input has been received at least once. |
# Source Code
View Volang source
channel = input::channel()
if (channel == "pattern") {
state::set("has_pattern", true)
}
if (channel == "v1") {
state::set("has_v1", true)
}
if (channel == "v2") {
state::set("has_v2", true)
}
if (channel == "v3") {
state::set("has_v3", true)
}
if (channel == "v4") {
state::set("has_v4", true)
}
if (!state::get("has_pattern")) {
return
}
trigger = false
if (channel == "pattern" and config::get("trigger_on_pattern")) {
trigger = true
}
if (channel == "v1" and config::get("trigger_on_v1")) {
trigger = true
}
if (channel == "v2" and config::get("trigger_on_v2")) {
trigger = true
}
if (channel == "v3" and config::get("trigger_on_v3")) {
trigger = true
}
if (channel == "v4" and config::get("trigger_on_v4")) {
trigger = true
}
if (!trigger) {
return
}
pattern = input::get("pattern")
v1 = input::get("v1")
v2 = input::get("v2")
v3 = input::get("v3")
v4 = input::get("v4")
count = str::count(pattern, "{}")
if (count >= 1 and !state::get("has_v1")) {
return
}
if (count >= 2 and !state::get("has_v2")) {
return
}
if (count >= 3 and !state::get("has_v3")) {
return
}
if (count >= 4 and !state::get("has_v4")) {
return
}
if (count == 0) {
output::set("text", pattern)
} else if (count == 1) {
output::set("text", str::fmt(pattern, v1))
} else if (count == 2) {
output::set("text", str::fmt(pattern, v1, v2))
} else if (count == 3) {
output::set("text", str::fmt(pattern, v1, v2, v3))
} else {
output::set("text", str::fmt(pattern, v1, v2, v3, v4))
}
