DimWell

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

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

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 :wink:

jfeng

jfeng

One way is with Michał Muskała’s Format library GitHub - michalmuskala/format: A simple string formatter for Elixir · GitHub. 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

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.

Last Post!

trollfred

trollfred

It is a bit awkward, that there is no nicer way

Where Next?

Popular in Questions Top

joaquinalcerro
Hi there, I am working with Ecto-Postgresql and I need to call all of the records from a specific table but the table has 40,000 records...
New
Brian
What is the proper way to load a module from a file in to IEX? In the python world, doing something like this pretty standard: from ....
New
Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
New
komlanvi
Hi everyone, I was playing with phoenix liveView but I run into an issue. I have a form and want to validate each input text when the te...
New
vrod
I am using the Starship cross-shell prompt – it seems pretty nice, but I get some errors: [WARN] - (starship::utils): Executing command ...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID&lt;0.412.0&gt; terminating ** (Postgrex.Error) FATAL...
New
svb
Hi! Currently I want to submit a form by pressing the Enter key. However, since my input field is of type “textarea” this is just adds a...
New

Other popular topics Top

dokuzbir
I want to highlight html closing tags when i click a html tag. That works in .html files but doesnt work for html.eex templates. How can...
New
Darmani72
If I have a post route which an argument: post /my_post_route/:my_param1, MyController.my_post_handler How would get the post params ...
New
dogweather
I wrote this comment on r/haskell, and it’s not popular there. :wink: But I think I’m on to something… Haskell reminds me of Java, and e...
New
AstonJ
Seen any cool LiveView demos, sample apps or examples? Please post them here! :003:
New
dblack
I’ve got an issue with an app and I’ve no idea of how to troubleshoot it. I’m hoping someone here might have seen something similar. I p...
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

We're in Beta

About us Mission Statement