• lua 工具类(一)


    --
    -- Author: My Name
    -- Date: 2013-12-16 18:52:11
    -- csv解析  
    -- 
      
    -- 去掉字符串左空白  
    local function trim_left(s)  
        return string.gsub(s, "^%s+", "");  
    end  
      
    -- 去掉字符串右空白  
    local function trim_right(s)  
        return string.gsub(s, "%s+$", "");  
    end  
      
    -- 解析一行  
    local function parseline(line)  
        local ret = {};  
      
        local s = line .. ",";  -- 添加逗号,保证能得到最后一个字段  
      
        while (s ~= "") do  
            --print(0,s);  
            local v = "";  
            local tl = true;  
            local tr = true;  
      
            while(s ~= "" and string.find(s, "^,") == nil) do  
                --print(1,s);  
                if(string.find(s, "^"")) then  
                    local _,_,vx,vz = string.find(s, "^"(.-)"(.*)");  
                    --print(2,vx,vz);  
                    if(vx == nil) then  
                        return nil;  -- 不完整的一行  
                    end  
      
                    -- 引号开头的不去空白  
                    if(v == "") then  
                        tl = false;  
                    end  
      
                    v = v..vx;  
                    s = vz;  
      
                    --print(3,v,s);  
      
                    while(string.find(s, "^"")) do  
                        local _,_,vx,vz = string.find(s, "^"(.-)"(.*)");  
                        --print(4,vx,vz);  
                        if(vx == nil) then  
                            return nil;  
                        end  
      
                        v = v.."""..vx;  
                        s = vz;  
                        --print(5,v,s);  
                    end  
      
                    tr = true;  
                else  
                    local _,_,vx,vz = string.find(s, "^(.-)([,"].*)");  
                    --print(6,vx,vz);  
                    if(vx~=nil) then  
                        v = v..vx;  
                        s = vz;  
                    else  
                        v = v..s;  
                        s = "";  
                    end  
                    --print(7,v,s);  
      
                    tr = false;  
                end  
            end  
      
            if(tl) then v = trim_left(v); end  
            if(tr) then v = trim_right(v); end  
      
            ret[table.getn(ret)+1] = v;  
            --print(8,"ret["..table.getn(ret).."]=".."""..v..""");  
      
            if(string.find(s, "^,")) then  
                s = string.gsub(s,"^,", "");  
            end  
      
        end  
      
        return ret;  
    end  
      
      
      
    --解析csv文件的每一行  
    local function getRowContent(file)  
        local content;  
      
        local check = false  
        local count = 0  
        while true do  
            local t = file:read()  
            if not t then  if count==0 then check = true end  break end  
      
            if not content then  
                content = t  
            else  
                content = content..t  
            end  
      
            local i = 1  
            while true do  
                local index = string.find(t, """, i)  
                if not index then break end  
                i = index + 1  
                count = count + 1  
            end  
      
            if count % 2 == 0 then check = true break end  
        end  
      
        if not check then  assert(1~=1) end  
        return content  
    end  
      
      
      
    --解析csv文件  
    function LoadCsv(fileName)  
        local ret = {};  
      
        local file = io.open(fileName, "r")  
        assert(file)  
        local content = {}  
        while true do  
            local line = getRowContent(file)  
            if not line then break end  
            table.insert(content, line)  
        end  
      
        for k,v in pairs(content) do  
            ret[table.getn(ret)+1] = parseline(v);  
        end  
      
      
        file:close()  
      
        return ret  
    end  
    
    function Csv2Lua(fileName, filePath, desFilePath )
        local t = LoadCsv(filePath);
        if t then
            t = luautil.serialize(fileName,t);
        end
        if t then
            luautil.writefile(t, desFilePath) 
        end
    end
    
    --test  
    --local t= LoadCsv("csvtesttxt.csv")  
    --for k,v in pairs(t) do  
    --  local tt = v  
    --  local s = ""  
    --  for i,j in pairs(tt) do  
    --      s = string.format("%s,%s",s,j)  
    --  end  
    --  print ("",s)  
    --end 
  • 相关阅读:
    安装node.js webkit环境[一]
    wpf 窗口最小化后,触发某事件弹出最小化窗口并置顶
    c# 旋转图片 无GDI+一般性错误
    类库里面添加日志记录 log4net
    string转xml
    DES c#加密后java解密
    使用排序字典排序
    怎么让一段xml被识别为字符串
    新装iis 页面503错误 DefaultAppPool停止解决方案
    hession
  • 原文地址:https://www.cnblogs.com/newlist/p/3595739.html
Copyright © 2020-2023  润新知