suineg 发表于 2017-9-6 15:34:44

[Lua]姓名转ID

本帖最后由 suineg 于 2017-12-8 10:35 AM 编辑

只支持纯名字转,各位有别的需要也可以在此Lua的基础上自己改自己想要的
1.支持复姓;
2.支持特殊读音;
3.已知WIZ口音修改;

只有一个核心方法:(用带类型的函数定义来看)
string Name.TrancelateName(string strName);

使用方法
1.require "本文件"
2. local strName = Name.TrancelateName("休莱格")
这里的strName就是拼音了,会返回"xiu laige"

如果不想要每次查询的输出,可以在方法里面的

因为直传lua失败,故压缩了一下

北大侠客行MUD,中国最好的MUD

sansouci 发表于 2017-9-6 16:03:55

不错,支持分享~

oolong 发表于 2017-9-6 18:51:11

本帖最后由 oolong 于 2017-9-6 07:02 PM 编辑

回复 2# sansouci

感觉会有bug
比如: 单于熊
可能 单于 熊
也可能 单 于熊
{:7_279:}

if string.find(name, i) then
--这个写法。。。 第三个字 单怎么办。。。
比如string.match(name,"^"..i)

foolenough 发表于 2017-9-6 19:34:24

不错,支持。
不对的可以自己再处理一下
比如
if name = "单于熊" then py = "shanyuxiong"
else py=Name.Translate(name)end

karr 发表于 2017-9-6 20:29:05

3.已知WIZ口音修改;

这句话亮了

oolong 发表于 2017-9-6 20:46:28

回复 4# foolenough
我试过了发现写法效率太低了,我重新写了一下
Name = {};
Name.TrancelateName = function(name)

if Name.DoubleName then
return Name.DoubleName.." "..string.gsub(string.sub(name,5,10),'(..)',Name.table)
elseif Name.DoubleName then
return Name.DoubleName.." "..string.gsub(string.sub(name,3,10),'(..)',Name.table)

else

return string.gsub(string.sub(name,1,2),'(..)',Name.table) .." "..string.gsub(string.sub(name,3,10),'(..)',Name.table)
end
return ""
end

suineg 发表于 2017-9-6 21:16:03

回复 3# oolong

单字开始只能是姓,
没有单于这个姓吧,
我姓的表格和名的表格是分开的

suineg 发表于 2017-9-6 21:18:02

回复 6# oolong


写法问题,
我开始是没有复姓表写的一个,
这时候是不是复姓是根据名字长度判断的,
所以会有那种写法,
你这也行,
不过就可以表分开了,
复姓的表和单姓的表分开,
减少查找量

oolong 发表于 2017-9-6 21:22:48

主要代码简洁执行效率高才好。
for多了 白白增加cpu消耗。
能1000行不要写2000行。
{:7_279:}

longzaitian 发表于 2017-9-7 11:02:02

感谢楼主分享~~~~这样就方便多了。
页: [1] 2
查看完整版本: [Lua]姓名转ID