How can I replace (") by (')

Hello, I have a small problem.
if i have something like:

path = '/home/trini/phoenix-vosk/deps/vosk/priv/vosk-model-small-en-0.42'
model = :vosk.model_new(path)

everything works correctly for me

The problem occurred when I wanted to replace the path with an environment variable and i did something like that:

env = System.get_env("VOSK_MODEL")
model = :vosk.model_new(env)

and it happens that vosk requires that the path be inside single quotes (') but System.get_env("VOSK_MODEL") returns the path in double quotes (")

I’ve tried replacing the double quotes with singles as follows, but to no avail.

cleaned_model_path = String.replace(env, "\"", "'")

clarified that if we do something like

env = System.get_env('VOSK_MODEL')

the function System.get_env gives an error

The question I have is how can I replace (") by (')

You need to use to_charlist when dealing with Erlang libs…

2 Likes

Strings (written with ") and charlists (written with ') are different things. There’s a good introduction in the docs.

String.replace is still going to return a string - the quotes are not part of the value, they are how the value is written literally.

System.get_env expects a string, not a charlist, so it gives you an error if you write System.get_env('VOSK_MODEL')

You need to convert the string value returned from System.get_env into a charlist for the :vosk library - the String.to_charlist/1 function is a good choice for this.

3 Likes

you are correct, thank you very much

thank you very much for the help it helped me a lot

the problem solved I’m left something like this:

   env = System.get_env("VOSK_MODEL")
      c_path = String.to_charlist(env)
      model = :vosk.model_new(c_path)

This would be the Elixir way to write the same code…

model = "VOSK_MODEL"
|> System.get_env()
|> String.to_charlist()
|> :vosk.model_new()