2010-09-12 7 views
3

Je souhaite imprimer des valeurs entières dans un fichier. Je suis capable d'écrire des valeurs de chaîne dans le fichier, mais lorsque je tente d'écrire une valeur entière, il donne une erreur:erlang, écrire des valeurs entières dans un fichier

%this works fine 
{ok, F}=file:open("bff.txt", [read,write]), 
Val="howdy", 
file:write(F,Val). 

%this gets compiled, but results in error {error, badarg} while executing 
{ok, F}=file:open("bff.txt", [read,write]), 
Val=23424, 
file:write(F,Val). 

Toutes les suggestions?
En fait je veux écrire un code de benchmarking pour un serveur web et j'ai besoin d'écrire toutes les valeurs de temps et de non de requêtes dans un fichier de sortie, et ensuite je vais l'utiliser pour tracer un graphique avec gnuplot.

Répondre

10

Utilisez integer_to_list/1 pour convertir des entiers en une liste pour file:write/2.

{ok, F}=file:open("bff.txt", [read,write]), 
Val=integer_to_list(23424), 
file:write(F,Val). 
+0

Merci, il a travaillé – comatose

5

Ceci est dû au fait que file:write ne peut produire que des chaînes. Une alternative consiste à utiliser les fonctions du module io qui fonctionnent également sur les fichiers. Donc io:write(File, Val) fonctionnera. Vous pouvez également utiliser les fonctions io formatées io:format. Cela dépend vraiment de la manière dont vous souhaitez formater les données et de la façon dont elles doivent être lues, écrire simplement des entiers avec io:write ne sera pas très utile si vous avez l'intention de les lire.

0

Vous pouvez utiliser term_to_binary et binary_to_term:

{ok, F} = file:open("bff.txt", [read,write]), 
Val = [1,2,3,4], 
Data = term_to_binary(Val), 
file:write(F, Data), 

{ok, BinaryData} = file:read_file("bff.txt"), 
Val = binary_to_term(BinaryData), 
io:format("~s~w~s", ["Value: ", Val, "\n"]). 
Questions connexes