2017-09-11 2 views
0

Je suis nouveau à Elixir. J'essaie de prendre du texte à partir d'un fichier pour le transformer en graphique.Manipuler une chaîne depuis File Stream dans Elixir

Le fichier est formaté en tant que tel:

1 2 
1 3 
2 3 

Chaque nombre étant l'ID de noeuds connectés.

Comment puis-je prendre les 2 valeurs de la fonction String.split/1 à un autre emplacement dans le programme? Voilà ce que j'avais jusqu'à présent:

File.stream!("../text_file") 
    |> Stream.map(&(String.replace(&1, "\n", ""))) 
    |> Enum.each(String.split/1) 

Il ne sortie le: atome ok, mais il imprime le contenu si j'échange String.split/1 pour IO.puts/1

Répondre

1

Enum.each/2 est destiné à être utilisé avec des fonctions où vous ne vous souciez pas de la valeur de retour (fonctionne généralement avec seulement des effets secondaires, comme IO.puts). Si vous souhaitez collecter les données renvoyées, vous avez besoin de Enum.map/2. En outre, si vous voulez supprimer les espaces de fin, vous devez utiliser String.trim_trailing/1)

File.stream!("a") 
|> Stream.map(&String.trim_trailing/1) 
|> Enum.map(&String.split/1) 
|> IO.inspect 

Sortie:

[["1", "2"], ["1", "3"], ["2", "3"]]