技术宅,fat-man

增加语言的了解程度可以避免写出愚蠢的代码

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

寡人的接口设计是不是很赞呢

复制代码
@include lib/assert.awk
@include lib/logging.awk



#######################################################################################################
#                               PUBLIC FUNCTIONS                                                      #
#######################################################################################################

function isMatchURL(url,path,flag,params, __ARGVEND__, item, requireArray)
{
        debug("statck: isMatchURL...")
        assert(match(flag,/=/)>0, \
                "assertion faild: named flag variable is incorrect")

        debug(parseFullPath(url))
        debug(parseDomain(url))


        if(path != "" && parseFullPath(url) != path && parseDomain(url) != path)
        {
                debug("path is not equal to url")
                return 0
        }

        parseParam(flag,requireArray)
        parseParam(url,params)

        debug("foreach every item")
        for(item in requireArray)
        {
                debug("current item is "item)
                if(!(item in params))
                {
                        debug(item" not in url")
                        delete params
                        return 0
                }

                if(requireArray[item] != params[item])
                {
                        debug(item" value "params[item]" is not equal to "requireArray[item])
                        delete params
                        return 0
                }
        }

        info("url is bussines url!")
        return 1
}



function parse(url, parseURL, parseParams, __ARGVEND__, tempArray, i, a, s,key,value)
{
        parseURL["domain"] = parseDomain(url)
        parseURL["path"]   = parsePath(url)
        parseParam(url,parseParams)
}

#######################################################################################################
#                                       INNER FUNCTIONS                                               #
#######################################################################################################


function parsePath(url, __ARGVEND__)
{
        if(match(url,/\/[^\?$]*[\?$]/)>0)
        {
                return substr(url,RSTART,RLENGTH-1)
        }
        else
        {
                return ""
        }
}


function parseDomain(url, __ARGVEND__)
{
        if(match(url,/[:\/]/)>0)
        {
                return substr(url,1,RSTART-1)
        }
        else
        {
                return url
        }
}

function parseFullPath(url, __ARGVEND__)
{       
        if(match(url,/[\?$]/)>0)
        {
                return substr(url,1,RSTART-1)
        }
        else
        {
                return url
        }
}

function parseParam(url, params, __ARGVEND__, newUrl, tempArray, i, key, value)
{
        newUrl = url
        while(1)
        {
                if(match(newUrl,/[&?][^&$]+/)>0)
                {
                        tempArray[substr(newUrl,RSTART+1,RLENGTH-1)]
                        newUrl = substr(newUrl,RSTART+RLENGTH,length(newUrl)-RSTART+RLENGTH)
                }
                else
                {
                        break
                }
        }

        for(i in tempArray)
        {
                split(i,a,"=")
                key = a[1]
                value = a[2]
                params[key] = value
        }
}
复制代码

下面是调用

复制代码
function statCoverPage(url,__ARGVEND__)
{
        path = "bookshelf.uc.cn/i.php"
        flag = "ct=def&ac=uc"

        debug("statck: statCoverPage...")
        if(isMatchURL(url,path,flag,params))
        {
                for(i in params)
                {
                        print i" "params[i]
                }

                item = params["sn"]" "params["bid"]
                if(item in COVERS)
                {
                        info(params["sn"] "access this book "params["bid"]" again")
                        COVERS[item]++
                }
                else
                {
                        info(params["sn"]" first access book "params["bid"])
                        COVERS[item] = 1
                }
        }
        else
        {
                debug("the url is not bussines url!")
        }
}
复制代码

 

posted on   codestyle  阅读(464)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示