-module(tool).
%% ====================================================================
%% API functions
%% ====================================================================
-export([modify_hostname/0,modify_ip/0]).
modify_hostname() ->
 {ok,HostName} = inet:gethostname(),
 %通过截取和加入。得到priv所在的文件夹
 EbinDir = filename:dirname(code:which(?MODULE)),
 ProjectDir = string:sub_string(EbinDir,1,length(EbinDir)-4),
 PrivDir = ProjectDir ++ "priv/",
 {ok,Files} = file:list_dir(PrivDir),
 lists:foreach(fun(A)-> replace(PrivDir++A,HostName) end,Files),
 io:format("modify hostname successfully!~n").
replace(FileName,HostName) ->
 {ok,Content} = file:read_file(FileName),
 RawString = binary_to_list(Content),
%%  以非贪婪模式匹配@开头不包括}的随意字符同一时候以逗号结束的特征串
 {ok,MP1} = re:compile("@[^}]*,",[ungreedy]),
 ResultString1 = re:replace(RawString,MP1,"@"++HostName++",",[{return,list},global]),
%%  以非贪婪模式匹配@开头不包括}和逗号的随意字符同一时候以]}结束的特征串
 {ok,MP2} = re:compile("@[^},]*]}",[ungreedy]),
 ResultString2 = re:replace(ResultString1,MP2,"@"++HostName++"]},",[{return,list},global]),
%%  以非贪婪模式匹配@开头不包括}和逗号的随意字符同一时候以]}结束的特征串
 {ok,MP3} = re:compile("@[^,]*}]",[ungreedy]),
 ResultString3 = re:replace(ResultString2,MP3,"@"++HostName++"}]",[{return,list},global]),
    file:write_file(FileName, list_to_binary(ResultString3)).

modify_ip() ->
 {ok,Iflist} = inet:getif(),
 {A,B,C,D} = element(1,lists:nth(2,Iflist)),
 Ebin = filename:dirname(code:which(?MODULE)),
%%  得到nodefinder.app所在的路径
 ProjectDir = string:sub_string(Ebin,1,length(Ebin)-17),
 AppDir = ProjectDir ++ "Res/ebin/nodefinder.app",
 {ok,Content} = file:read_file(AppDir),
 LocalIp = "{"++integer_to_list(A)++","++integer_to_list(B)++","++integer_to_list(C)++","++integer_to_list(D)++"}",
 RawString = binary_to_list(Content),
%%  通过正則表達式进行匹配后。然后替换成本机Ip
 {ok,MP} = re:compile("{[0-9]+,[0-9]+,[0-9]+,[0-9]+}"),
 ResultString = re:replace(RawString, MP, LocalIp,[{return,list}]),
 file:write_file(AppDir,list_to_binary(ResultString)),
 io:format("modify ip successfully!~n").

解析的文件例如以下:

总结:(1)学习通过filename:dirname(code:which(?MOUDLE))获取文件所在的绝对路径。

              (2)erlang的file:get_cwd(),file:list_dir("."),默认的是工作文件夹或是c:cd(...)后进入的文件夹,假设没有设定erlang的工作文件夹。则“.”表示当前文件夹;

               (3)学习erlang中正則表達式的用法

Erlang正则解析操作文件的更多相关文章

  1. 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】

    一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...

  2. [Xcode 实际操作]七、文件与数据-(8 )读取和解析Plist文件(属性列表文件)

    目录:[Swift]Xcode实际操作 本文将演示如何读取和解析Plist文件,即属性列表文件. 它是用来存储,串行化后的对象的文件. 在项目名称上点击鼠标右键,弹出右键菜单, 选择[New File ...

  3. 用dom4j解析xml文件并执行增删改查操作

    转自:https://www.aliyun.com/jiaocheng/1339446.html xml文件: <?xml version="1.0" encoding=&q ...

  4. Jsoup系列学习(2)-解析html文件

    解析html文件 1.当我们通过发送http请求时,有时候返回结果是一个html格式字符串,你需要从一个网站获取和解析一个HTML文档,并查找其中的相关数据.你可以使用下面解决方法: 使用 Jsoup ...

  5. CSharpGL(5)解析3DS文件并用CSharpGL渲染

    CSharpGL(5)解析3DS文件并用CSharpGL渲染 我曾经写过一个简单的*.3ds文件的解析器,但是只能解析最基本的顶点.索引信息,且此解析器是仿照别人的C++代码改写的,设计的也不好,不方 ...

  6. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

  7. XML:使用DOM技术解析xML文件中的城市,实现select级联选择

    中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...

  8. dom4j如何解析XML文件

    最近在 一些对xml文件的操作,下面简单写一个dom4j解析xml文件并将其封装到一个javabean中的例子,只是具有针对性的,不是通用的,仅供参考哦~~ 首先说:dom4j是一个java的XML ...

  9. Android中的几种解析XML文件的类

    Ø DOM解析 优点: 1.XML树在内存中完整存储,因此可以直接修改其数据和结构. 2.可以通过该解析器随时访问XML树中的任何一个节点. 3.DOM解析器的API在使用上也相对比较简单. 缺点:如 ...

随机推荐

  1. Apache: You don't have permission to access / on this server

    当我们需要使用Apache配置虚拟主机时,有可能会出现这个问题:Apache: You don't have permission to access / on this server # 同IP不同 ...

  2. Ladies' Choice UVALive - 3989 稳定婚姻问题 gale_shapley算法

    /** 题目: Ladies' Choice UVALive - 3989 链接:https://vjudge.net/problem/UVALive-3989 题意:稳定婚姻问题 思路: gale_ ...

  3. 差异:git clone , git fetch, git pull和git rebase

    随笔 - 96  文章 - 1  评论 - 6   Git Pull据我所知,当你使用git pull时,它将会获取远程服务器(你请求的,无论什么分支)上的代码,并且立即合并到你的本地厂库,Pull是 ...

  4. 一行python打印乘法表

    一行代码打印乘法表 >>> print '\n'.join([' '.join(['%s*%s=%-2s' %(y,x,x*y) for y in range(1,x+1)]) fo ...

  5. MySQL集群系列1:2台机器搭建双主集群

    先配置静态IP 2台机器mysql密码一样,最好在同一局域网内,最好在mysql刚安装时就配置好,后面有数据了不好同步. 本文实现了2台机器mysql数据同步成功: 配置my.cnf 先关闭防火墙 s ...

  6. PHP输出javascript,alert中文乱码解决办法

    echo '<html><head><meta http-equiv="Content-Type" content="text/html; ...

  7. 将字符“12345”转换成long型

    将字符“12345”转换成long型 解答: String s=”12345″; long num=Long.valueOf(s).longValue();

  8. WebAPI发布IIS报错问题

    1.看IIS中处理程序映射中有没有注册:ExtensionlessUrlHandler-Integrated-4.0 没有的话需要在[运行]中注册:aspnet_regiis.exe 2.配置文件中要 ...

  9. String.Join

    在指定 String 数组的每个元素之间串联指定的分隔符 String,从而产生单个串联的字符串.(来源于MSDN) 有两个重载函数:[C#]public static string Join(   ...

  10. String painter (hdu 2476 DP好题)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2476 题目大意: 给出两个等长的串S, T, 要将S变成T, 每次可以把S的连续的一段变成相同的字母 ...