小程序实现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' => ,
'type' => 'word',
'filename' => 'word1.mp4',
'title'=> 'Word发展历史'
],
[
'MediaID' => ,
'type' => 'word',
'filename' => 'word2.mp4',
'title'=> 'Word基本界面'
],
[
'MediaID' => ,
'type' => 'word',
'filename' => 'word3.mp4',
'title'=> 'Word新建'
],
[
'MediaID' => ,
'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[][];//属性
int pcnt;
bool ck(char wd[]){//不为NULL,""
for(int i=;wd[i];i++){
if(wd[i]=='\''&&i&&wd[i-]=='\'')
return ;
if(wd[i]=='N')
return ;
}
return ;
}
void solve(){
char c,wd[]="";
int f=INSERT,i,j;
while(){
c=getchar();
if(c==EOF)break;
if(f==INSERT){
if(c=='`'){
f=TABLE;
i=;
}
if(c=='(')
f=G_PRO;
}else if(f==TABLE){
if(c=='`'){
wd[i]='\0';
i=;
f=INSERT;
printf("DB::table('%s')->insert([\n",wd);
}
else
wd[i++]=c;
}else if(f==G_PRO){//属性列表
if(c=='`'){
f=PRO;
i=;
}
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=;//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=;//读过下一个值
}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=;
f=G_IN;
}else
wd[i++]=c;
}else if(f==IN2){
if(c=='\'')
f=IN;
wd[i++]=c;
}
}
printf("]);\n");
}
int main() {
solve();
return ;
}
小程序实现sql插入语句转换成Laravel迁移语句的更多相关文章
- SQL中DateTime转换成Varchar样式
SQL中DateTime转换成Varchar样式语句及查询结果:Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect ...
- 【HIVE】sql语句转换成mapreduce
1.hive是什么? 2.MapReduce框架实现SQL基本操作的原理是什么? 3.Hive怎样实现SQL的词法和语法解析? 连接:http://www.aboutyun.com/thread-20 ...
- 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果
去年盛夏之时,曾写过“小tip: 使用CSS将图片转换成黑白”一文,本文的模式以及内容其实走得是类似路线.CSS3 → SVG → IE filter → canvas. 前段时间,iOS7不是瓜未熟 ...
- [转] 小tip: 使用CSS将图片转换成模糊(毛玻璃)效果 ---张鑫旭
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=3804 去年盛夏之时, ...
- 小tip: 使用CSS将图片转换成黑白(灰色、置灰)[转]
小tip: 使用CSS将图片转换成黑白(灰色.置灰) 这篇文章发布于 2012年08月19日,星期日,20:41,归类于 css相关, SVG相关. 阅读 159943 次, 今日 146 次 ...
- 分享一个小工具:Excel表高速转换成JSON字符串
在游戏项目中一般都须要由策划制作大量的游戏内容,当中非常大一部分是使用Excel表来制作的.于是程序就须要把Excel文件转换成程序方便读取的格式. 之前项目使用的Excel表导入工具都是通过Offi ...
- 小技巧,把execl.exe转换成dll
小技巧 把execl.exe转换成dll1.把excel.exe复制到CProgram FilesMicrosoft Visual Studio .NET 2003SDKv1.1Bin夹中,和TlbI ...
- sql hibernate查询转换成实体或对应的VO Transformers
sql查询转换成实体或对应的VO Transformers //addScalar("id") 默认查询出来的id是全部大写的(sql起别名也无效,所以使用.addScalar(& ...
- uniapp微信小程序canvas绘图插入网络图片不显示
网络图片缓存 在uni中wx可以用uni代替 无区别: 先把要插入的网络图片缓存(getImageInfo); let context = uni.createCanvasContext('first ...
随机推荐
- Fragment配合RadioGroup实现点击切换布局
这里用了 compile 'com.jakewharton:butterknife:7.0.1' compile 'org.greenrobot:eventbus:3.0.0' MainActivit ...
- GCD定时器
// // ViewController.m // GCD 定时器 // // #import "ViewController.h" NSInteger count = ; @in ...
- AsyncHttpClient 源码分析
上一篇文章从功能和用法上对AsyncHttpClient做了个大致介绍,今天我们和以往一样,从内部实现.原理的角度带领大家看看 其工作机制,以便加深理解.写程序越多,我发现每接触一个新东西,都会有强烈 ...
- SE_homework1(第一部分)
题目:写一个能自动生成小学四则运算题目的命令行"软件",分别满足下列各种需求.下面这些需求都可以用命令行参数的形式来指定: a.)除了整数以外,还支持真分数的运算.(例如1 ...
- 在cmd和terminal怎么粘贴?
在osx, linux的terminal 以及windows的 cmd实现粘贴是coder经常要做的事,鼠标右键,下拉菜单中单击粘贴paste.但是这显得笨拙,及其不快捷.但是正常使用的command ...
- BOOST.Asio——Overview
=================================版权声明================================= 版权声明:原创文章 谢绝转载 啥说的,鄙视那些无视版权随 ...
- 搭建 OpenStack 实验环境 - 每天5分钟玩转 OpenStack(16)
在学习 OpenStack 各服务之前,让我们先搭建起一个实验环境. 毋庸置疑,一个看得到摸得着而且允许我们随便折腾的 OpenStack 能够提高我们的学习效率. 因为是我们自己学习用的实验环境,C ...
- C++STL - 函数模板
模板主要是为了泛型编程,做到与类型无关 模板有函数模板和类模板,本文主要整理的是函数模板 1.函数模板定义 template<typename 类型形参1,typename 类型形参2,...& ...
- MAC OS X的ACL扩展权限设置
在WEB开发时,网站是以_www的用户运行的,而我在本地是以liuwencan的用户编辑的.这就带来一个问题:如果所有文件属于liuwencan,那么网站运行需要写文件时就因无权限而失败:如果所有文件 ...
- OOM killer
Linux下有一种OOM KILLER 的机制,它会在系统内存耗尽的情况下,启用自己算法有选择性的kill 掉一些进程. 1. 为什么会有OOM killer 当我们使用应用时,需要申请内存,即进行m ...