csv转lua

来源:互联网 发布:linux vim 查找字符串 编辑:程序博客网 时间:2024/05/16 07:08

本人现在一个人负责一款RPG手游的客户端,真是压力山大啊,首先客户端的是采用的cocos2d-x + lua,之前都是用纯C++写的,数值这块用的是csv,当我接触到lua时,我就想到了,如果把csv直接转成lua代码,那在程序中用起来应该很方便,有了念头,不妨来试试,效果果然很理想,由于代码简单,我这就不写注释了,只是给大家提供这么一个思路,本人工作经验也不多,自己瞎琢磨出来的办法不知道是不是真的是个好办法,还希望前辈们多多指教

csv文件


转换成lua代码后


QT源代码

#include <QCoreApplication>#include <QFile>#include <QTextStream>#include <QDebug>#include <QDir>#include <QTextDecoder>#include <QTextCodec>bool findFile(const QString& path);void csv2lua(QFileInfo& file_info);int main(int argc, char *argv[]){    QCoreApplication a(argc, argv);    QFile file("D:\\qt_project\\TOLUA\\tolua.ini");    QString filepath="";    if(file.open(QFile::ReadOnly))    {        QTextStream stream(&file);        filepath= stream.readLine();    }    file.close();    findFile(filepath);    return a.exec();}bool findFile(const QString & path){    QDir dir(path);    if (!dir.exists())    {        return false;    }    dir.setFilter(QDir::Dirs|QDir::Files);    dir.setSorting(QDir::DirsFirst);    QFileInfoList list = dir.entryInfoList();    int i = 0;    bool is_dir = false;    do{        QFileInfo file_info = list.at(i);        QStringList list;        if (file_info.fileName()=="."|file_info.fileName()=="..")        {            i++;            continue;        }        is_dir = file_info.isDir();        if (is_dir)        {            findFile(file_info.filePath());        }        else if(file_info.suffix() == "csv")        {            csv2lua(file_info);        }        ++i;    } while(i<list.size());    return true;}bool save(QString& file_path, QString& data){    QFile outfile(file_path);    if (!outfile.open(QIODevice::WriteOnly | QIODevice::Text))    {        return false;    }    QTextStream outstream(&outfile);    outstream.setCodec("UTF-8");    outstream << data;    outstream.flush();    outfile.close();    return true;}void csv2lua(QFileInfo& file_info){    qDebug()<<file_info.absoluteFilePath();    QFile csv_file(file_info.absoluteFilePath());    if(!csv_file.open(QFile::ReadOnly))    {        return;    }    QTextStream csv_stream(&csv_file);    QString line;    bool data_type = false;    QStringList type_list;    QString data;    while((line = csv_stream.readLine()) != "")    {        QRegExp rx("[#]");        line.replace(rx,"-");        QStringList list = line.split(";");        if(line.startsWith("--"))        {            data.append(line + "\n");            continue;        }        if(!data_type && !line.startsWith("--"))        {            type_list = list;            data_type = true;            data.append("--" + line + "\n");            data.append(file_info.baseName() + "_tab =\n{\n");            continue;        }        for(int i=0; i<list.size(); ++i)        {            QString element = list.at(i);            if(type_list.at(i) == "string")            {                element = "\"" + element + "\"";            }            if(i < type_list.size() - 1)            {                element.append(";");                if(i == 0)                {                    element = "{" + element;                }            }            else            {                element.append("};\n");            }            data.append(element);        }    }    data.append("}");    qDebug()<<data.toStdString().c_str();    QString lua_file_path = file_info.absolutePath() + "\\"+ file_info.baseName() + ".lua";    save(lua_file_path, data);}

使用方法

dofile("E:\\Resourse\\Test\\test.lua")print("fuck=" .. test_tab[1][3][1])

打印结果



0 0
原创粉丝点击