【问题标题】:Building an application to transform CSV files构建应用程序来转换 CSV 文件
【发布时间】:2014-04-16 18:57:54
【问题描述】:

我有一个粗略而完整的 CSV 转换器。我当前系统的工作方式是将 CSV 文件导入到具有静态列名的 SQL 数据库表中,并且仅导出特定(需要的)列。该系统运行良好,但仅特定于一种类型的 CSV 文件(因为列名是预定义的。)我想知道如何使这个通用。而不是让它插入 column1、column2、column3。我想插入电子表格 Column1、电子表格 Column2、电子表格 Column3 等。我将如何从 CSV 文件中提取列名,并在数据库中创建一个新表,列名来自 CSV 的第一行文件。

当前系统:

  • 客户端上传 CSV 文件。
  • 使用预定义的列名(第 1 列、第 2 列、第 3 列)创建表
  • 使用 LOAD DATA INFILE -> PHP 脚本会将 CSV 文件中的信息插入到最近创建的表中。
  • 运行的下一个查询只是从表中取出特定列并将其导出到最终的 CSV 文件。

理想的系统:

  • 客户端上传 CSV 文件。
  • PHP 脚本读取 CSV 文件并仅获取第一行(列名),获取这些列名后,它将根据列名创建一个新表。
  • PHP 脚本现在使用 LOAD DATA INFILE。
  • 其余与当前系统相同。

当前代码:

import.php

include("/inc/database.php");
include("/inc/functions.php"); 
include("/inc/data.php"); 
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$string = random_string(7);
$new_file_name = 'report_'. $string .'.csv';
$themove = move_uploaded_file($_FILES['csv']['tmp_name'], 'C:/xampp/htdocs/uploads/'.$new_file_name);
        mysql_query("CREATE TABLE report_". $string ."(". $colNames .")") or die(mysql_error());
    $sql = "LOAD DATA INFILE '/xampp/htdocs/uploads/report_". $string .".csv'
INTO TABLE report_". $string ."
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(". $insertColNames .")";
    $query = mysql_query($sql) or die(mysql_error());
    header('Location: download.php?dlname='.$string.'');
}

data.php(缩短了大部分内容。实际上大约有 200 列进入,230 列出来)

<?php
$colNames = "Web_Site_Member_ID text, 
Master_Member_ID text, 
API_GUID text, 
Constituent_ID text";
$insertColNames = "Web_Site_Member_ID,
Master_Member_ID,
API_GUID,
Constituent_ID";
$exportNames = "Web_Site_Member_ID, Date_Membership_Expires, Membership, Member_Type_Code";
?>

functions.php 仅包含用于生成随机字符串/文件名的代码块。

【问题讨论】:

  • 我认为您应该尝试编写您所要求的代码,并在遇到精确问题时向我们提出更精确的问题。
  • 发布您当前的代码。
  • 啊,CSV。你用fgetcsv了吗?
  • Anthony,感谢您发布您的代码,但我仍然没有看到您尝试在示例中使用 fgetcsv 函数。如果我们看不到您做错了什么,我们将无法帮助您。

标签: php mysql sql excel csv


【解决方案1】:

要读取 CSV 文件,请查看 fgetcsv() 函数。您应该能够轻松地提取一行数据并访问结果数组中的每个单独字段以用于列标题定义。

【讨论】:

  • 我尝试过使用 fgetcsv() 无济于事。我会尝试再弄乱它一些。而不是 $data[0] 是第一行,单元格 1。和 $data[1] 是第一行,单元格 2。它会向下读取信息。
  • 如果您发布您拥有的代码,也许我们可以更好地帮助您指出您做错了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-05
  • 2016-09-25
  • 2016-07-16
相关资源
最近更新 更多