2015-02-17 3 views
2

Кто-нибудь знает, как я могу добавить новую строку в текстовый файл в Erlang язык? Я хочу, чтобы сохранить этот список:Erlang, как я могу создать текстовый файл с символами новой строки?

Data = ["one", "two", "three"], 

в текстовый файл с новой строки:

one 
two 
three 

Я попытался:

write() -> 
    Data = ["1","2","3"], 
    Print = string:join(Data, "\n"), 
    file:write_file("/Documents/foo.txt", [Print]). 

Но это создает текстовый файл с инлайн данными:

one\ntwo\nthree 

ответ

3

Я предполагаю, что вы используете свой код на Windows, и поэтому вам нужно "\r\n" в качестве разделителя строк. Вы можете получить разделитель строк, подходящий для платформы, на которой вы находитесь, вызывая io_lib:nl/0.

Попробуйте вместо этого:

write() -> 
    Data = ["1","2","3"], 
    LineSep = io_lib:nl(), 
    Print = [string:join(Data, LineSep), LineSep], 
    file:write_file("/Documents/foo.txt", Print). 

Здесь Print является экземпляром iodata, который является либо iolist или binary, где iolist сколь угодно глубокий список, состоящий из одного или нескольких символов, двоичные файлы или другие иолисты. Это чрезвычайно удобный тип данных для вывода в Erlang, потому что это означает, что вы можете избежать необходимости сгладить свои данные перед тем, как записать его в файл или отправить его через сокет. Эта версия функции write использует форму iodata для переменной Print, чтобы гарантировать, что за последней строкой данных, записанных в файл, следует разделитель строк, то, что string:join/2 сам по себе не будет делать.

+0

Большое спасибо, это то, что мне нужно! –

0

попробовать это:

write() -> 
    Data = ["1","2","3"], 
    Print = string:join(Data, "\n"), 
    file:write_file("/Documents/foo.txt", Print). 
+1

Результат этого кода будет таким же, как и исходный плакат. –