使用Erlang将整个文本文件读入变量,进行文本替换并将修改后的文件写入新目录

Pau*_*her 3 erlang full-text-search file variable-assignment

问题:想要将文件内容(大小小于1MB)读入Erlang变量,进行一些文本替换并将修改后的内容写入新文件.我是Erlang的新手,想要使用简单的代码而不进行错误处理(从Erlang shell中使用它).

我试过了:

File = file:read_file("pbd4e53e0.html").
Run Code Online (Sandbox Code Playgroud)

但是在使用时

string:len(File).
Run Code Online (Sandbox Code Playgroud)

我明白了

异常错误:函数长度/ 1中的错误参数在调用string:len/1(string.erl,第66行)时称为length({ok,<<">}).

下一步是做替换:

re:replace(File, "<a href=\'pa", "<a href=\'../pa/pa", [{return, list}]).
Run Code Online (Sandbox Code Playgroud)

问题1:我应该如何将文件读入Erlang变量?

问题2:更换是否正常?

ber*_*eal 8

对于第一个问题,file:read_file/1返回一个元组{Status, Result},所以赋值应该像:

{ok, File} = file:read_file("pbd4e53e0.html").
Run Code Online (Sandbox Code Playgroud)

其次,File将是二进制文件,而不是字符串,因此您需要先将其转换为字符串:

Content = unicode:characters_to_list(File).
Run Code Online (Sandbox Code Playgroud)

(您也可以提供编码参数)

然后string:len(Content)将按预期工作.

至于替换部分,将正则表达式与HTML一起使用通常是一个非常糟糕的主意,但从API的角度来看看似乎没问题.