小程序实现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 ...
随机推荐
- ListView setOnItemClickListener无效原因分析
前言 最近在做项目的过程中,在使用listview的时候遇到了设置item监听事件的时候在没有回调onItemClick 方法的问题.我的情况是在item中有一个Button按钮.所以不会回调.上百度 ...
- OC load与initialize
OC load与initialize load 当类被引用进程序的时候会执行这个函数 一个类的load方法不用写明[super load],父类就会收到调用,并且在子类之前. Category的loa ...
- Android View的几个位置坐标关系
1. View的边界,left, top, right, bottom(即左上右下),这些值都是相对View的父容器说的: 2. View的x, translationX, y, translatio ...
- AndroidStudio配置gradle,让App自动签名
最近开发关于微信一系列功能,发现分享.支付必须要打包签名才能测试,太耽误事了,耗时耗力...在网上扒拉扒拉资料,发现有很多前辈都处理过类似问题,非常感谢大家的分享,参考链接:http://blog.c ...
- Linux服务器宕机案例一则
案例环境 操作系统 :Oracle Linux Server release 5.7 64bit 虚拟机 硬件配置 : 物理机型号为DELL R720 资源配置 :RAM 8G Intel(R) Xe ...
- C++: 主要知识点
大学期间,学了一学期的C语言,当然包括学习数据结构时,用的也是C语言.当时刚刚接触计算机,对于编程更是一无所知.上课学习学习,偶尔会照着书上敲一下代码.大二下学期,就丢掉了不用了.最近由于工作的需要, ...
- 关于一个sql的优化分析
应用这边新上线了一个查询,正在跑,让我看下状态以及分析下能不能再快点. 如下sql: SELECT x.order_no , order_date+7/24 AS order_date, addres ...
- 如何使用 OpenStack CLI - 每天5分钟玩转 OpenStack(22)
本节首先讨论 image 删除操作,然后介绍 OpenStack CLI 的使用方法,最后讨如何 Troubleshoot. Web UI 删除 image admin 登录后,Project -&g ...
- VI常用的命令
vi filename : 打开或者新建一个文件夹,并将光标置于第一行首位 I : 表示光标在当前位置编辑文本 A : 表示光标进入下以恶字符位置编辑文件 X : 每按一次删除光标所在位置的前面一个字 ...
- Centos6.5下设置静态IP
1.编辑网卡配置文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0 设置网卡eth0的IPV4信息,需要注意的是,设置的IPADDR需要和局域网中其他机器处 ...