`

[练习]erlang 生成文本内单词索引

 
阅读更多

不知道标题这么取是否恰当

就是生成单词内的索引

看《改变未来的九大算法》(是本民科 清晰易懂)的第二章 仿照里面的索引 如下:



 文本里内容和图中也是一样的

先把结果打出来 因为我很懒 就不对dict做解析了 直接返回的就是个dict 结果如下:

29> filereader:read("G:\erl_workbench\pattern", "*.txt").
File name:"1.txt"
File name:"2.txt"
File name:"3.txt"
{{dict,3,16,16,8,80,48,
       {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
       {{[],
         [[3|{"3.txt"}]],
         [],[],[],[],
         [[2|{"2.txt"}]],
         [],[],[],[],
         [[1|{"1.txt"}]],
         [],[],[],[]}}},
 {dict,9,16,16,8,80,48,
       {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
       {{[["on",{1,4},{2,4}]],
         [["dog",{2,2},{3,6}]],
         [],[],
         [["while",{3,4}]],
         [],[],
         [["cat",{1,2},{3,2}],["sat",{1,3},{3,7}]],
         [],
         [["mat",{1,6},{2,6}]],
         [],[],
         [["the",{1,...},{...}|...],["stood",{...}|...],[[...]|...]],
         [],[],[]}}}}

 

代码如下:

%% @author cc fairjm
%% fair-jm.iteye.com
%% @doc @todo read files and return indexes of the words in the files.


-module(filereader).

-export([read/2,read_info/3]).


read(Dir,WildCard) ->
  process_flag(trap_exit, true),
  file:set_cwd(Dir),
  Files=filelib:wildcard(WildCard),
  {_Num,FileDict}=lists:foldl(fun readFile/2,{1,dict:new()}, Files),
  WordDict=recinfo(dict:new(),0,length(Files)),
  {FileDict,WordDict}
.

readFile(Filename,{In,Dict}) ->
 io:format("File name:~p~n", [Filename]), 
 Self=self(),
 spawn_link(?MODULE,read_info,[Filename,In,Self]),
 {In+1,dict:store(In, {Filename}, Dict)}
.

read_info(Filename,Number,To) ->
	%io:format("read_info ~p",[Filename]),
	case file:read_file(Filename) of
		{ok,Data}->
			Tokens=string:tokens(binary_to_list(Data), " \r\n"),
			{_N,Dict}=lists:foldl(
			  fun(E,In) ->
				{N,Dict}=In,
				{N+1,dict:append(E, {Number,N}, Dict)}
		      end, {1,dict:new()}, Tokens),
			To ! {ok,Dict};
		{_Other} ->
           To ! error
     end
.

recinfo(Dict,Now,Size) ->
	case Now==Size of
		true -> Dict;
		false ->
	receive
		{ok,Data} ->
			%io:format("data received ~p", [Data]),
			NewDict=dict:merge(fun(_Key,V1,V2)-> V1++V2 end, Dict, Data),
			recinfo(NewDict,Now+1,Size);
		{_Other} ->
			%io:format("error"),
			recinfo(Dict,Now+1,Size)
    end
	end.

 在IDE里操作一切正常 但是到erl中(win下) 发现代码中的 file:set_cwd/1没起作用 要手动在erl中 file:set_cwd/1才可以....不知道为什么

 

API方法其实只有一个 就是read/2 那个read_info/3也导出是因为不导出spawn_link/3那就无法运行了(额 erlang一些地方都忘了 有人知道回答一下吗?)

  • 大小: 20.7 KB
0
3
分享到:
评论

相关推荐

    erlang test 生成 dets

    标题中的“erlang test 生成 dets”表明我们要讨论的是使用Erlang编程语言进行测试,并生成DETS(Disk-based Erlang Terms Storage)文件的过程。DETS是Erlang提供的一种持久化数据存储机制,类似于关系数据库的表,...

    erlang 入门练习

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高可用性、分布式和容错系统。本教程将带你入门Erlang,通过实践来学习其基本概念和语法。 在Erlang中,程序是由一系列的进程...

    erlang入门级练习:LeetCode OJ问题的部分erlang 源码

    我自己在新学erlang,在LeetCode OJ上找了题目练习,题目很适合新手熟悉语言,但是LeetCode OJ里面只有几门主流语言的答案,下面是已完成的erlang源代码,后续有空再做其他问题续传,题目包含:(源码开头都有题目...

    Erlang编写的生成一注双色球小程序

    **Erlang编程语言在生成双色球小程序中的应用** Erlang是一种功能强大的并行、分布式计算语言,尤其在处理高并发、容错性系统方面表现出色。在这个双色球小程序中,Erlang的独特特性和内置函数(BIFs,Built-in ...

    用matlab产生 erlang分布的随机数,两种方法

    在MATLAB中,我们可以利用不同的函数或技巧来生成服从Erlang分布的随机数。以下是两种常用的方法: **方法一:`gammavariate`函数** MATLAB中的`gammavariate`函数实际上是调用了C语言库的实现,可以生成伽马分布...

    erlang websocket 练习

    结合给定的标题“erlang websocket 练习”和描述,我们可以推断这是一个关于使用Erlang实现WebSocket服务的实践项目。 首先,让我们详细了解一下Erlang中的WebSocket实现。在Erlang中,通常会使用 Cowboy 或 YAWS ...

    Erlang入门:构建application练习2

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高可用性、分布式和实时系统。在本教程中,我们将深入探讨如何使用Erlang构建一个名为"Application"的基本应用程序,这在...

    erlang编程 Introducing Erlang

    **Erlang编程:Introducing Erlang** Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,...

    erlang25.0 windows版本

    6. **编译器升级**:Erlang的BEAM虚拟机和编译器可能会有优化,使得编译速度更快,生成的代码更高效。 作为“源码软件”,Erlang 25.0同样提供了源代码,开发者可以深入研究其内部工作原理,进行定制化开发,或者为...

    erlang_版本24.3.4.4

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,主要用于构建高可用性、分布式和实时系统。版本24.3.4.4是Erlang的一个更新版本,包含了对先前版本的改进和修复。Erlang以其强大的错误...

    Erlang入门:构建application练习5(监督树)

    在这个"Erlang入门:构建application练习5(监督树)"中,我们将探讨如何构建一个包含监督树的应用,这是Erlang OTP(开放电信平台)设计模式中的核心部分。 监督树是Erlang OTP设计原则的重要组成部分,它用于管理...

    erlang简单聊天练习

    "erlang简单聊天练习"是一个使用Erlang语言实现的轻量级聊天应用示例,它展示了Erlang在并发通信、分布式系统和容错性方面的优势。通过学习和实践这个项目,开发者可以更好地理解和掌握Erlang的基础知识,以及如何...

    erlang9.rar

    "otp_win64_20.0.exe"是实际的安装文件,这意味着尽管标题提到了Erlang9,但压缩包内提供的实际上是OTP的20.0版本。这可能是由于在发布时,Erlang 20已经是基于OTP 20的版本,而Erlang 9可能不再支持或者已经过时。 ...

    Erlang/OTP 26.2.1

    Erlang/OTP 26.2.1,Erlang,OTP,26.2.1

    erlang资源

    这个“erlang资源”包含两本PDF书籍——《Erlang并发编程》和《Erlang入门手册》,它们是深入理解和学习Erlang语言的关键资料。 《Erlang并发编程》这本书可能涵盖了以下知识点: 1. **并发模型**:Erlang的并发...

    erlang22最新下载包

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson为了实现分布式实时、高可靠性系统而开发。Erlang以其强大的并行处理能力、容错性和易于构建大规模分布式系统的特点,在电信、金融和互联网等...

    erlang安装包.zip

    erlang安装包

    Erlang程序设计,包含完整目录和全套源码

    Erlang是一种面向并发、高容错性的函数式编程语言,尤其在构建分布式系统和实时软实时应用领域中表现出色。这个压缩包包含了Erlang程序设计的完整目录和源码,是学习和理解Erlang编程的重要资源。 Erlang的并发特性...

    Erlang Programming 导读.pdf

    - **实践项目**: 结合实际案例进行练习,比如实现一个简单的 Web 服务器或聊天应用,通过实践加深对 Erlang 特性的理解。 - **社区交流**: 加入 Erlang 社区,与其他开发者交流经验和技术问题,参与开源项目也是提高...

Global site tag (gtag.js) - Google Analytics