erlang学习:用ETS和DETS存储数据2

今日学习创建一个ETS表

下面是代码实现

erlang 复制代码
-module(lib_trigrams).

-export([make_ets_set/0, make_ets_ordered_set/0]).
for_each_trigram_in_the_english_language(F, A0) ->
  {ok, Bin0} = file:read_file("test.txt"),
  Bin = zlib:gunzip(Bin0),
  scan_word_list(binary_to_list(Bin), F, A0).


scan_word_list([], _, A) ->
  A;
scan_word_list(L, F, A) ->
  {word, L1} = get_next_word(L, []),
  A1 = scan_trigrams([$\s | word], F, A),
  scan_word_list(L1, F, A1).

get_next_word([$\r, $\n | T], L) ->
  {lists:reverse([$\s | L]), T};
get_next_word([H | T], L) ->
  get_next_word(T, [H | L]);
get_next_word([], L) ->
  {lists:reverse([$\s | L]), []}.


scan_trigrams([X, Y, Z], F, A) ->
  F([X, Y, Z], A);
scan_trigrams([X, Y, Z | T], F, A) ->
  A1 = F([X, Y, Z], A),
  scan_trigrams([Y, Z | T], F, A1);
scan_trigrams(_, _, A) ->
  A.


make_ets_ordered_set() -> make_a_set(ordered_set, "trigramsOS.tab").
make_ets_set() -> make_a_set(set, "trigramsS.tab").


make_a_set(Type, FileName) ->
  Tab = ets:new(table, [Type]),
  F = fun(Str, _) -> ets:insert(Tab, {list_to_binary(Str)}) end,
  for_each_trigram_in_the_english_language(F, 0),
  ets:tab2file(Tab, FileName),
  Size = ets:info(Tab, size),
  ets:delete(Tab),
  Size.

书上代码中的reverse没有lists,因此会报错,需要改为lists:reverse

搞了个txt文本之后报错为数据异常,有点没搞明白txt文档里面要存什么数据

相关推荐
2303_Alpha12 小时前
SpringBoot
笔记·学习
萘柰奈12 小时前
Unity学习----【进阶】TextMeshPro学习(三)--进阶知识点(TMP基础设置,材质球相关,两个辅助工具类)
学习·unity
沐矢羽12 小时前
Tomcat PUT方法任意写文件漏洞学习
学习·tomcat
好奇龙猫12 小时前
日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(10):91-100语法+考え方13
学习
向阳花开_miemie13 小时前
Android音频学习(十八)——混音流程
学习·音视频
工大一只猿13 小时前
51单片机学习
嵌入式硬件·学习·51单片机
c0d1ng13 小时前
量子计算学习(第十四周周报)
学习·量子计算
Hello_Embed20 小时前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件
咸甜适中20 小时前
rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中
笔记·学习·rust
Magnetic_h1 天前
【iOS】设计模式复习
笔记·学习·ios·设计模式·objective-c·cocoa