小程序实现sql插入语句转换成Laravel迁移语句

sql的插入语句长这样:

INSERT INTO `media` (`MediaID`, `type`, `filename`, `title`) VALUES
(1, 'word', 'word1.mp4', 'Word发展历史'),
(2, 'word', 'word2.mp4', 'Word基本界面'),
(3, 'word', 'word3.mp4', 'Word新建'),
(4, 'word', 'word4.mp4', 'Word保存');

 

 

我需要的Laravel的迁移插入语句长这样:

DB::table('media')->insert([
[
    'MediaID' => 1,
    'type' =>  'word',
    'filename' =>  'word1.mp4',
    'title'=>  'Word发展历史'
],
[
    'MediaID' => 2,
    'type' =>  'word',
    'filename' =>  'word2.mp4',
    'title'=>  'Word基本界面'
],
[
    'MediaID' => 3,
    'type' =>  'word',
    'filename' =>  'word3.mp4',
    'title'=>  'Word新建'
],
[
    'MediaID' => 4,
    'type' =>  'word',
    'filename' =>  'word4.mp4',
]);
 有限状态自动机,随便写了个小程序,应付自己临时的需求。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define INSERT 0
#define TABLE 1
#define G_PRO 2
#define PRO 3
#define G_IN 4
#define IN 5
#define IN2 6
using namespace std;
char pro[100][300];//属性
int pcnt;
bool ck(char wd[1000]){//不为NULL,""
    for(int i=0;wd[i];i++){
        if(wd[i]=='\''&&i&&wd[i-1]=='\'')
            return 0;
        if(wd[i]=='N')
            return 0;
    }    
    return 1;
}
void solve(){
    char c,wd[1000]="";
    int f=INSERT,i,j;
    while(1){
        c=getchar();
        if(c==EOF)break;
        if(f==INSERT){
            if(c=='`'){
                f=TABLE;
                i=0;
            }
            if(c=='(')
                f=G_PRO;
        }else if(f==TABLE){
            if(c=='`'){
                wd[i]='\0';
                i=0;
                f=INSERT;
                printf("DB::table('%s')->insert([\n",wd);
            }
            else
                wd[i++]=c;
        }else if(f==G_PRO){//属性列表
            if(c=='`'){
                f=PRO;
                i=0;
            }
            else if(c==')')
                f=G_IN;
        }else if(f==PRO){//属性
            if(c=='`'){
                wd[i]='\0';//输出前截断后面的。
                sprintf(pro[pcnt++],"%s",wd);
                f=G_PRO;
            }else wd[i++]=c;
        }else if(f==G_IN){//等待一个插入
            if(c=='('){
                j=i=0;//j是属性下标
                f=IN;
            }
            else if(c=='I')
                f=INSERT;
        }else if(f==IN){
            if(c==','){
                wd[i]='\0';
                if(!j)
                    printf("[\n");
                if(ck(wd))
                    printf("\t'%s' => %s,\n",pro[j],wd);
                j++;
                i=0;//读过下一个值
            }else if(c=='\''){
                wd[i++]=c;
                f=IN2;//读入字符串
            }else if(c==')'){
                wd[i]='\0';
                if(ck(wd))
                    printf("\t'%s'=> %s\n",pro[j],wd);
                puts("],");
                i=j=0;
                f=G_IN;
            }else
                wd[i++]=c;
        }else if(f==IN2){
            if(c=='\'')
                f=IN;
            wd[i++]=c;
        }
    }
    printf("]);\n");
}
int main() {
    solve();
    return 0;
}

 

  

posted @ 2016-10-25 21:10  水郁  阅读(587)  评论(0编辑  收藏  举报
……