根据提交的二维数据得到mysql建表和插入数据实用工具

根据提交的二维数据得到mysql建表和插入数据实用工具,这是重构版本(之前有过)。

会通过数据的长度,类型,是否数字,是否唯一等做判断,且每千条一个插入语句以优化性能。

<?php 
//整理与分享:yujianyue<15058593138@qq.com>
setlocale(LC_ALL, 'C'); //window:删除行首双斜杠
$ti = "csv2sql";
$filename = 'data.csv'; // CSV 文件路径function analyzeCSV($filename) {
if (!file_exists($filename) || !is_readable($filename)) {
die("CSV file not found or not readable.");
}
$handle = fopen($filename, 'r');
$header = fgetcsv($handle,0,"\t"); // 获取表头
$data = []; $Info = []; // 用于存储字段分析结果
while (($row = fgetcsv($handle,0,"\t")) !== false) {
$data[] = $row; $ii=0;
foreach ($row as $index => $value) {
$fName = $header[$index];
$length = strlen($value);  $ii++;
if (!isset($Info[$fName])) {
$Info[$fName] = [
'maxLen' => 8,
'mixLen' => 2,
'iseng' => false,
'isNum' => true,
'keNull' => false,
'values' => [],
'isFix' => true
];
}
// 更新字段长度信息
$Info[$fName]['maxLen'] = max($Info[$fName]['maxLen'], $length);
$Info[$fName]['mixLen'] = max($Info[$fName]['mixLen'], $length);
// 检查是否为数字
if (!is_numeric($value) ) $Info[$fName]['isNum'] = false;
// 检查是否为6+英文数字(username)
if (preg_match('/^[a-zA-Z0-9]{6,18}$/', $value)) $Info[$fName]['iseng'] = true;
// 检查是否有空值
if ($value === '') { $Info[$fName]['keNull'] = true; }
// 检查是否等长
if ($Info[$fName]['isFix'] && $length !== $Info[$fName]['maxLen'] && $value !== '') {
$Info[$fName]['isFix'] = false;
}
$Info[$fName]['values'][] = $value;
}
}
fclose($handle);
foreach ($Info as $fName => &$info) {
$info['isUni'] = count(array_unique($info['values'])) === count($info['values']);
}
$tableName = basename($filename, ".csv");
$cTab = "CREATE TABLE `$tableName` (\n";
$cTab .= "`chalide_id` int(11) unsigned NOT NULL AUTO_INCREMENT,\n";
$oSQL = "\n\n-- -可能需要修改:表名称等\n\n";
$oSQL .= "INSERT INTO `$tableName` (" . implode(", ", array_map(function($field) { return "`$field`"; }, $header)) . ") VALUES\n";
$iSuo = [];
foreach ($Info as $fName => $info) {
// 确定字段类型
if ($info['isNum']) {
$type = "INT(" . $info['maxLen'] . ")"; // $type = "FLOAT";
} else {
$type = "VARCHAR(" . $info['maxLen'] . ")";
}
// 添加 NULL 或 NOT NULL
$nullability = $info['keNull'] ? "" : "NOT NULL";
// 添加唯一性约束
$unique = "";
if($info['iseng']){
$unique = $info['isUni'] ? "UNIQUE" : "";
$iSuo[] = " INDEX ".$fName." (`".$fName."`)";
}
$cTab .= " `$fName` $type $nullability $unique COMMENT '$fName',\n";
}
if(count($iSuo)>0){
$cTab .= join(",\n", $iSuo) . "\n);\n";
}else{
$cTab = rtrim($cTab, ",\n"). "\n);\n";
}
$cTab .= "\n-- -以下可删除:供优化修改参考\n";
$cTab .= "-- -可能需要修改表名;字段长度;默认值等 及 以下索引优化\n";
$cTab .= "-- -字段名称别符号,可英文字母开头字母数字可中文\n";
$cTab .= "-- -普通索引参考: INDEX ".$fName." (`".$fName."`),\n";
$cTab .= "-- -全文索引参考: FULLTEXT (`".$fName."`),\n";
$cTab .= "-- -唯一索引参考: UNIQUE KEY `".$fName."` (`".$fName."`),\n";
$cTab .= "-- -索引参考: KEY `".$fName."` (`".$fName."`),\n";
// 生成插入数据的 SQL 语句
$values = []; $ii=0; $iSQL="";
foreach ($data as $row) {
$ii++;
$rowValues = array_map(function($value) {
return $value === '' ? "NULL" : "'" . addslashes($value) . "'";
}, $row);
$values[] = "(" . implode(", ", $rowValues) . ")";
if(stristr("$ii|","000|")){$iSQL .= $oSQL . implode(",\n", $values) . ";\n"; $values = [];
}
}
if(count($values)>0)$iSQL .= $oSQL . implode(",\n", $values) . ";\n";return [
'cTab' => $cTab,
'iSQL' => $iSQL
];
}
function txtarea($nb,$ti="结果展示",$ht="88vh") {$nb = htmlspecialchars($nb);$ti = "<p>$ti</p>";return "<div class='ban'>$ti<textarea style='height:$ht;'>$nb</textarea></div>";
}
if($_GET["x"] == "cha"){
$txts = isset($_POST['tips']) ? Trim($_POST['tips']) : '';
file_put_contents($filename,$txts);
$result = analyzeCSV($filename);
echo txtarea($result['cTab'],"CREATE TABLE SQL:");
echo txtarea($result['iSQL'],"INSERT SQL:");
exit();
}
?>
<!DOCTYPE html>
<html>
<head>
<title><?php echo $ti;?></title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0">
<meta name="apple-mobile-web-app-capable" content="yes" />
<script type="text/javascript">
console.log("问题反馈电话:","15058593138");
console.log("问题反馈邮件:","admin@12391.net");
function $(objId){
return document.getElementById(objId);
}
function loadcha(xid) {
var xmlhttp;
var Stxt= "nums=aa";
Stxt+="&tips="+ encodeURIComponent($("tips").value);
//$("tips").innerHTML = "正在加载...";
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var btxt = xmlhttp.response;
if(btxt == "err01"){ $("tipx").innerHTML = "!"; return false;}
$('tipx').innerHTML = xmlhttp.response;
}
}
xmlhttp.open("POST", "?x=cha&tt="+Math.random(), true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(Stxt);
}</script>
<style>
#tipx{display:flex;width:99.7%;border:0;margin-top:5px;}
.ban{width:49%;border:0;margin:0;}
textarea{display:block;width:99.7%;min-width:360px;border:1px solid #ccc;height:160px;}
table{margin:10px auto;border-left:1px solid #a2c6d3;border-top:3px solid #0180CF;width:99.7%;}
table td{border-right:1px solid #a2c6d3;border-bottom:1px solid #a2c6d3;word-wrap:break-word;word-break:break-all;}
.tt{background-color: #f2f2f2;}
b{color:red;}
#submit{ height:35px;}
</style>
</head>
<body><form class="form" id="form" method="POST" act="?act=cha" ><h3><?php echo $ti;?></h3>
<textarea id="tips">
姓名	学号	身份证号	科目1	科目2	科目3	科目4	科目5	科目.	科目N
李一	10001001	90001001	87	84	75	91	83	76	87
李二	10001002	90001002	95	81	81	71	60	82	99
李三	10001003	90001003	68	80	65	79	68	71	91
李四	10001004	90001004	82	80	75	90	87	64	81
李五	10001005	90001005	60	64	61	71	73	85	61
李六	10001006	90001006	62	69	77	73	96	67	82
李七	10001007	90001007	98	72	68	59	84	92	92
李一	10001001	90001001	87	84	75	91	83	76	87
李二	10001002	90001002	95	81	81	71	60	82	99
李三	10001003	90001003	68	80	65	79	68	71	91
李四	10001004	90001004	82	80	75	90	87	64	81
李五	10001005	90001005	60	64	61	71	73	85	61
李六	10001006	90001006	62	69	77	73	96	67	82
李七	10001007	90001007	98	72	68	59	84	92	92
李一	10001001	90001001	87	84	75	91	83	76	87
李二	10001002	90001002	95	81	81	71	60	82	99
李三	10001003	90001003	68	80	65	79	68	71	91
李四	10001004	90001004	82	80	75	90	87	64	81
李五	10001005	90001005	60	64	61	71	73	85	61
李六	10001006	90001006	62	69	77	73	96	67	82</textarea>
<input type="button" id="submit" value="提交" onclick="loadcha('xid')">
<div id="tipx"></div></form>
</body>
</html>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/461532.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0开始electron+vue2搭建环境

使用环境&#xff1a;node版本16.16.0 目录 搭建vue项目安装electron打包electron 搭建vue项目 已有vue2的环境直接进项安装electron步骤 没有的请先移动到这里查看 vue2脚手架搭建项目流程 我就不另外记录了 安装electron 直接运行 vue add electron-builder安装完成后&…

Qt——QWidget

一.控件概述 Widget 是 Qt 中的核心概念. 英文原义是 "小部件"&#xff0c;我们也把它翻译为 "控件" 。 控件是构成⼀个图形化界面的基本要素。 像上述示例中的, 按钮, 列表视图, 树形视图, 单行输入框, 多行输入框, 滚动条, 下拉框等, 都可以称为 "…

最经典盲超分辨率数据集

一、背景 底层视觉的发展是否能够让我们真正地看清这个世界呢&#xff1f; 在单图超分中&#xff0c;非盲超分已经发展得较为成熟了&#xff0c;而盲超分和真实超分仍然有很多问题尚未解决。在我看来&#xff0c;盲超分只是真实超分的一个过渡&#xff0c;由于真实世界中退化…

Spring Boot 配置文件详解与最佳实践

目录 前言1. 配置文件的作用2. Spring Boot 主要配置内容2.1 Actuator 配置2.2 缓存配置2.3 核心配置2.4 数据库与数据迁移配置2.5 开发工具配置2.6 Docker Compose 配置2.7 JSON 配置2.8 安全配置 3. 多个配置文件的处理方法3.1 使用 Profile 文件区分环境3.2 结合优先级加载配…

【Stable Diffusion】

1、SD 模型 安装完SD软件后&#xff0c;必须搭配基础模型才能使用。 不同的基础模型&#xff0c;其画风和擅长的领域会有侧重。 Checkpoint大模型 大模型是 SD 的核心&#xff0c;用来控制生成图片的整个画面风格走势。 出图前要选择好合适的大模型&#xff0c;比如有些擅长…

吉林大学2023级数据结构上机实验第(1~2周)参考答案(关注我,在系统关闭后持续更新)

A 括号匹配&#xff08;进阶版&#xff09; 分数 10 编写程序检查给定字符串中包含的括号是否正确匹配&#xff0c;本题中的括号有{ }、[ ]、( )、< >四种。另外再加上一个新的约束条件&#xff1a;当有多种括号嵌套时&#xff0c;嵌套的顺序应为{ → [ → ( → <&…

【综合算法学习】(第十三篇)

目录 解数独&#xff08;hard&#xff09; 题目解析 讲解算法原理 编写代码 单词搜索&#xff08;medium&#xff09; 题目解析 解析算法原理 编写代码 解数独&#xff08;hard&#xff09; 题目解析 1.题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09;…

【C++】string 类模拟实现:深入探索字符串操作原理

快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f6a9;在之前的文章中我们学会了对string类函数的使用&#xff0c;现在让我们对其进行模拟实现吧~&#x1f6a9; 目录 &#x1f4af;引言 &#x1f4…

[c++高阶]AVL树的深度剖析模拟实现

1.前言 如果你不知道什么是二叉搜索树&#xff0c;那么请你一定要阅读以下文章。 [c高阶]二叉搜索树深度剖析-CSDN博客 二叉搜索树如果在已经有序的情况下进行插入的话&#xff0c;那么他的时间复杂度是O(N)&#xff0c;然后有时候的时间复杂度又是O(logN)&#xff0c;因此在实…

我在命令行下剪辑视频

是的&#xff0c;你不需要格式工厂&#xff0c;你也不需要会声会影&#xff0c;更不需要爱剪辑这些莫名其妙的流氓软件&#xff0c;命令行下视频处理&#xff0c;包括剪辑&#xff0c;转码&#xff0c;提取&#xff0c;合成&#xff0c;缩放&#xff0c;字幕&#xff0c;特效等…

Tita:什么是 360 评估?

360 评估是一个专业的反馈机会&#xff0c;使一组同事和经理能够提供有关同事绩效的反馈。与仅由其经理评估员工工作绩效的典型员工绩效评估不同&#xff0c;360 评估会考虑来自同事和报告员工的反馈&#xff0c;甚至包括客户和与员工互动的其他人。 Tita&#xff1a;什么是 3…

jenkins ssh 免密报错Host key verification failed.

jenkins 发布项目&#xff0c;ssh连接远程服务器时报错&#xff1a;Host key verification failed. 解决&#xff1a; 原因是生成的sshkey不是用的jenkins用户&#xff0c;所以切换用户到&#xff1a;jenkins重新生成sshkey su jenkins ssh-keygen -t rsa ssh-copy-id -i ~/…

【Linux第七课--基础IO】内存级文件、重定向、缓冲区、文件系统、动态库静态库

目录 引入内存级文件重新使用C文件接口 -- 对比重定向写文件读文件文件流 认识文件操作的系统接口open参数 -- flagflag的内容宏的传参方式 open关闭文件写文件读文件结论 引入文件描述符fd、对文件的理解理解一切皆文件方法集文件fd的分配规则 重定向代码的重定向输入重定向输…

创意设计的起点:十大网页设计模板网站

对于网页设计领域的专业人士和爱好者而言&#xff0c;从零开始构建一个网页可能会耗费大量的时间和劳力。幸运的是&#xff0c;我们可以通过使用现成的网页模板来提升工作效率并节省宝贵的时间。一个好的模板不仅能提高设计效率&#xff0c;还能激发出卓越的创意灵感。因此&…

鸿蒙Harmony-矩形绘制组件Rect使用详解

目录 一&#xff0c;定义 二&#xff0c;绘制自定义图形 三&#xff0c;作为其他控件背景使用 一&#xff0c;定义 Rect是鸿蒙提供的矩形绘制组件&#xff0c;利用该组件可以绘制矩形背景&#xff0c;矩形图案等 官方提供的参数和属性&#xff1a; 参数&#xff1a; 参数名…

netty之bootstrap源码分析

写在前面 本文看下bootstrap类。 1&#xff1a;正文 1.1&#xff1a;干啥的&#xff1f; 在进行netty编程的时候都是先创建一个bootstrap&#xff0c;然后设置很多的东西&#xff0c;如下代码&#xff08;服务端启动代码&#xff09;&#xff1a; ServerBootstrap b new …

c# WinForm弹出窗体时不获取焦点方法

WinForm开发的软件有时候需要在屏幕右下角弹窗进行一些提示&#xff0c;通常使用new MyForm().Show()即可实现此需求。 但是当MyForm显示出来时&#xff0c;会抢走原本窗体上的光标&#xff0c;导致原本在软件上比如打字或者其他操作被中断&#xff0c;非常不人性化&#xff0…

方差和标准差哪些事儿

1.方差 在概率论与数理统计中&#xff0c;方差用来度量随机变量和其数学期望&#xff08;即均值&#xff09;之间的偏离程度。方差是各个数据与平均数之差的平方和的平均数,即: s(1/n)[(x1-x_)^2 (x2-x_)^2 …(xn-x_)^2] 其中&#xff0c;x_表示样本的平均数&#xff0c;n表示…

Hudi Upsert原理

1. 前言 如果要深入了解Apache Hudi技术的应用或是性能调优&#xff0c;那么明白源码中的原理对我们会有很大的帮助。Upsert是Apache Hudi的核心功能之一&#xff0c;主要完成增量数据在HDFS/对象存储上的修改&#xff0c;并可以支持事务。而在Hive中修改数据需要重新分区或重…

了解SQLExpress数据库

SQLExpress&#xff08;Microsoft SQL Server Express&#xff09;是由微软公司开发的一款免费且轻量级的数据库管理系统。以下是关于SQLExpress的详细解释&#xff1a; 一、定义与特点 定义&#xff1a; SQLExpress是Microsoft SQL Server的一个缩减版或基础版&#xff0c;旨在…