DimWell
How to make String with Placeholders?
Hi Experts,
I am looking for built in function something like String builder with Placeholders.
Iet say in C like languages usuall you wold have function that looks like:
print(" Some string %placeholder1, string continues…%placeholder2 ", var1, var2)
#vars goes to placeholders
`Do we have something similar in Elixir ?
Use Case:
User provides: custom url with placeholders and separately details.
Then later url should be combined with data into proper url.
User: 223344
Lang: eng
Type: json | xml
Original URL
http: // somesite. com/?i=#{id}&lang=#{language}&type=api&api_v=1&api_type=#{data_type}"
Updated URL
https: // somesite. com/?i=#223344&lang=#eng&type=api&api_v=1&api_type=#json"
Marked As Solved
cpgo
Maybe not the simplest option but also works
iex(1)> template = "http://somesite.com/?i=#<%=id%>&lang=#<%=language%>&type=api&api_v=1&api_type=#<%=data_type%>"
"http://somesite.com/?i=#<%=id%>&lang=#<%=language%>&type=api&api_v=1&api_type=#<%=data_type%>"
iex(2)> EEx.eval_string(template, [id: 1, language: "pt-BR", data_type: "json"])
"http://somesite.com/?i=#1&lang=#pt-BR&type=api&api_v=1&api_type=#json"
Also Liked
michalmuskala
Format is rather experimental right now and has some issues especially around formatting floats. Maybe I should finally get into it an finish it, now that Jason is mostly done 
jfeng
One way is with Michał Muskała’s Format library https://github.com/michalmuskala/format. I’m not sure if there’s any documentation, but you can do:
def print_url(id, language, url) do
url
|> Format.compile()
|> Format.string(id: id, language: language)
|> IO.puts()
end
where url is a string that contains {id} and {language}, which get replaced by the corresponding values specified in Format.string.
My personal syntactic preference would be
...
|> Format.string([id: id, language: language])
...
mguimas
I suggest you to use :io_lib.format(format, [arg1, ...]) |> to_string(). See the documentation of :io_lib.format.
It is one less dependency if you use this function because it is in the standard library.







