2010-09-12 3 views
3

Я хочу напечатать целочисленные значения в файле. Я могу писать строковые значения в файл, но когда я пытаюсь написать целое значение, которое он дает ошибку:erlang, записывая целочисленные значения в файл

%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). 

Любые предложения?
На самом деле я хочу написать код сравнения для веб-сервера, и мне нужно записать все значения времени и отсутствия запросов к выходному файлу, а затем я буду использовать его для построения графика с помощью gnuplot.

ответ

10

Используйте integer_to_list/1 для преобразования целых чисел в список для file:write/2.

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

Спасибо, это сработало – comatose

5

Это потому, что file:write может выводить строки. Альтернативой является использование функций в модуле io, который также работает с файлами. Так что io:write(File, Val) будет работать. В качестве альтернативы вы можете использовать отформатированные функции io io:format. Это действительно зависит от того, как вы хотите отформатировать данные и как их читать, просто написать целые числа с io:write не будет очень полезно, если вы намереваетесь их прочитать.

0

Вы можете использовать term_to_binary и 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"]). 
Смежные вопросы