GVKun编程网logo

如何在php中上传和解析CSV文件(php导入csv)

4

本文将带您了解关于如何在php中上传和解析CSV文件的新内容,同时我们还将为您解释php导入csv的相关知识,另外,我们还将为您提供关于asp.net+js实现无刷新上传解析csv文件的代码、c#–如

本文将带您了解关于如何在php中上传和解析CSV文件的新内容,同时我们还将为您解释php导入csv的相关知识,另外,我们还将为您提供关于asp.net+js 实现无刷新上传解析csv文件的代码、c# – 如何在ASP.NET MVC3中上传和读取CSV文件、c++解析csv文件、java读取csv文件示例分享(java解析csv文件)的实用信息。

本文目录一览:

如何在php中上传和解析CSV文件(php导入csv)

如何在php中上传和解析CSV文件(php导入csv)

我想用php上传一个csv文件。上传文件后,我想显示CSV文件的数据。我想举一个如何完成这项任务的例子。

答案1

小编典典

尽管您可以轻松找到如何使用php处理文件上传的教程,并且有一些功能(手动)可以处理CSV,但是我将发布一些代码,因为几天前我从事一个项目,其中包括一些代码,您可以采用…

HTML:

<table width="600"><form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data"><tr><td width="20%">Select file</td><td width="80%"><input type="file" name="file" id="file" /></td></tr><tr><td>Submit</td><td><input type="submit" name="submit" /></td></tr></form></table>

PHP:

if ( isset($_POST["submit"]) ) {   if ( isset($_FILES["file"])) {            //if there was an error uploading the file        if ($_FILES["file"]["error"] > 0) {            echo "Return Code: " . $_FILES["file"]["error"] . "<br />";        }        else {                 //Print file details             echo "Upload: " . $_FILES["file"]["name"] . "<br />";             echo "Type: " . $_FILES["file"]["type"] . "<br />";             echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";             echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";                 //if file already exists             if (file_exists("upload/" . $_FILES["file"]["name"])) {            echo $_FILES["file"]["name"] . " already exists. ";             }             else {                    //Store file in directory "upload" with the name of "uploaded_file.txt"            $storagename = "uploaded_file.txt";            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $storagename);            echo "Stored in: " . "upload/" . $_FILES["file"]["name"] . "<br />";            }        }     } else {             echo "No file selected <br />";     }}

我知道必须有一种更简单的方法来执行此操作,但是我读取了CSV文件并将每个记录的单个单元格存储在二维数组中。

if ( isset($storagename) && $file = fopen( "upload/" . $storagename , r ) ) {    echo "File opened.<br />";    $firstline = fgets ($file, 4096 );        //Gets the number of fields, in CSV-files the names of the fields are mostly given in the first line    $num = strlen($firstline) - strlen(str_replace(";", "", $firstline));        //save the different fields of the firstline in an array called fields    $fields = array();    $fields = explode( ";", $firstline, ($num+1) );    $line = array();    $i = 0;        //CSV: one line is one record and the cells/fields are seperated by ";"        //so $dsatz is an two dimensional array saving the records like this: $dsatz[number of record][number of cell]    while ( $line[$i] = fgets ($file, 4096) ) {        $dsatz[$i] = array();        $dsatz[$i] = explode( ";", $line[$i], ($num+1) );        $i++;    }        echo "<table>";        echo "<tr>";    for ( $k = 0; $k != ($num+1); $k++ ) {        echo "<td>" . $fields[$k] . "</td>";    }        echo "</tr>";    foreach ($dsatz as $key => $number) {                //new table row for every record        echo "<tr>";        foreach ($number as $k => $content) {                        //new table cell for every field of the record            echo "<td>" . $content . "</td>";        }    }    echo "</table>";}

因此,我希望这会有所帮助,这只是一小段代码,并且我尚未对其进行测试,因为我使用的代码略有不同。评论应解释一切。

asp.net+js 实现无刷新上传解析csv文件的代码

asp.net+js 实现无刷新上传解析csv文件的代码

前阵子工作中用到,贴上代码,仅保留上传有关的代码,发现code其实很少。
上传页面html/js
复制代码 代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title></title>
<script type="text/javascript">
function FinishUpload(filePath) {
document.getElementById("uploadForm").reset();
if (!filePath) {
alert("Import Failed!");
}
else {
alert("Imported Successfully to " + decodeURIComponent(filePath) + "!");
}
}
function UploadFile() {
var arr = document.getElementById("txtFile").value.split('.');
var fileType = arr[arr.length - 1];
if (fileType.toLowerCase().indexOf("csv") < 0) {
document.getElementById("uploadForm").reset();
alert("Please select a csv file.");
return false;
}
document.getElementById("uploadForm").encoding = "multipart/form-data";
document.getElementById("uploadForm").submit();
}
function ResetFile(file) {
var tmpForm = document.createElement('form');
file.parentNode.insertBefore(tmpForm,file);
tmpForm.appendChild(file);
tmpForm.reset();
tmpForm.removeNode(false);
}
</script>
</head>
<body>
<form id="uploadForm" name="uploadForm" action="Upload.ashx" method="post" target="hidIframe" enctype="multipart/form-data">
<table cellpadding='0' cellspacing='0'border="0" >
<tr>
<td>
<input id="txtFile" name="txtFile" type="file"/>
<iframe name="hidIframe" id="hidIframe"https://www.jb51.cc/tag/dis/" target="_blank">display:none;" ></iframe>
</td>
</tr>
<tr>
<td>
<input type="button" id="btnImportOK" value="Upload" onclick="UploadFile();" />
<input type="button" id="btnImportCancel" onclick="ResetFile(document.getElementById('txtFile'))" value="Reset"/>
</td>
</tr>
</table>
</form>
</body>
</html>

 
处理文件上传的c#
复制代码 代码如下:

if (context.Request.Files.Count > 0)
{
HttpPostedFile file = context.Request.Files[0];
if (file.ContentLength > 0)
{
string title = string.Empty;
title = DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + Path.GetFileName(file.FileName);
string path = "./Upload/" + title;
path = System.Web.HttpContext.Current.Server.MapPath(path);
file.SaveAs(path);
context.Response.Write("<script>window.parent.FinishUpload('" + HttpUtility.UrlEncode(path) + "');</script>");
}
}
else
{
context.Response.Write("<script>window.parent.FinishUpload('');</script>");
}

  做到无刷新,基本原理就是:通过表单提交到iframe里,从而使刷新发生在iframe里。form设置action指向处理上传的文件,target指向iframe。上传操作的结果可以返回到iframe里,调用父对象的FinishUpload方法显示是否上传成功。所以在AJAX未流行时,常用这种方法来伪装未刷新的效果,现在仍然可以使用。
要注意的是:
enctype="multipart/form-data"不可少,enctype默认编码是“application/x-www-form-urlencoded”,设置enctype="multipart/form-data",用于二进制方式上传文件。
为防止文件名乱码,防止乱七八糟字符URL传递中出现问题,返回文件名到前台时进行HttpUtility.UrlEncode,在前台JS中取文件名时进行decodeURIComponent。
重置文件选择框时,要把文件选择框临时插入到临时表单,通过表单的reset方法重置。
顺便贴上解析上传的csv文件的code
解析csv文件
复制代码 代码如下:

private DataTable ImportDataTable(string filepath)
{
DataTable mydt = new DataTable("myTableName");
mydt.Columns.Add("Data ID",System.Type.GetType("System.String"));
mydt.Columns.Add("Field Name",System.Type.GetType("System.String"));
mydt.Columns.Add("New Value",System.Type.GetType("System.String"));
DaTarow mydr;
using (System.IO.StreamReader mysr = new System.IO.StreamReader(filepath))
{
int data;
char current;
StringBuilder text = new StringBuilder();
IDictionary<int,List<string>> results = new Dictionary<int,List<string>>();
bool isInYinHao = false; ;
int lineId = 1;
int index = 0;
while (true)
{
data = mysr.Read();
if (data != -1)
{
current = (char)data;
if (current == '"')
{
if (isInYinHao)
{
isInYinHao = false;
}
else
{
if (index > 0)
{
text.Append(current);
}
isInYinHao = true;
}
}
else if (current == ',')
{
if (isInYinHao)
{
text.Append(current);
}
else
{
SaveResult(results,lineId,text);
index = 0;
continue;
}
}
else if (current == '\r')
{
if (isInYinHao)
{
text.Append(current);
}
}
else if (current == '\n')
{
if (isInYinHao)
{
text.Append(current);
}
else
{
SaveResult(results,text);
index = 0;
lineId++;
continue;
}
}
else if (current == '\0')
{
}
else
{
text.Append(current);
}
index++;
}
else
{
//Read to file end.
SaveResult(results,text);
break;
}
}
foreach (int id in results.Keys)
{
mydr = mydt.NewRow();
for (int i = 0; i < results[id].Count; i++)
{
if (i > 2)
{
break;
}
mydr[i] = results[id][i];
}
mydt.Rows.Add(mydr);
}
}
return mydt;
}
private void SaveResult(IDictionary<int,List<string>> results,int lineId,StringBuilder text)
{
if (!results.ContainsKey(lineId))
{
results.Add(lineId,new List<string>());
}
results[lineId].Add(text.ToString());
text.Remove(0,text.Length);
}

点击下载

c# – 如何在ASP.NET MVC3中上传和读取CSV文件

c# – 如何在ASP.NET MVC3中上传和读取CSV文件

我正在处理一个项目,我需要上传一个CSV文件并阅读它.
我在Visual Studio 2010和MVC3和C#语言中工作.

如果我要使用html fileuplaod控件,我想如何获取上传的文件并在客户端本身读取它而不将文件保存在服务器中.
我必须使用jquery吗?
我搜索过但没有得到满足我要求的解决方案.我是MVC3和CSV文件处理的新手,非常困惑.

*上传.csv文件并将其读取以便将其保存在数据库中的最简单方法是什么.

一个明确的解决方案将受到高度赞赏.谢谢.

解决方法

您可以做的是将文件保存在服务器上,然后在从中读取内容后,您可以删除该文件.

我认为你无法从客户端阅读.您必须将其上传到您的服务器上才能阅读.

using (StreamReader CsvReader = new StreamReader(input_file))
                {
                    string inputLine = "";

                    while ((inputLine = CsvReader.ReadLine()) != null)
                    {
                        values.Add(inputLine.Trim().Replace(",","").Replace(" ",""));
                    }
                    CsvReader.Close();
                    return values;
                }

c++解析csv文件

c++解析csv文件

 1 /***
 2 *        解析csv文件
 3 */
 4 BOOL ParseCSVFile(string fileName)
 5 {
 6     //文件名错误
 7     vector<string> fields; //声明一个字符串向量
 8     string field;
 9     SplitString(fileName.c_str,fields,".");
10     if (fields.size() < 2 || fields[fields.size()-1] != "csv")
11     {
12         //"文件格式错误";
13     }
14 
15     ifstream fin(fileName); //打开文件流操作
16     string line; 
17     int lineCount = 0;
18     while (getline(fin, line))   //整行读取,换行符“\n”区分,遇到文件尾标志eof终止读取
19     {
20         vector<string> fields; //声明一个字符串向量
21         string field;
22         SplitString(line,fields,",");
23         if (fields.size() != 7)
24         {
25             continue;
26         }
27         string loginName = Trim(fields[0]); //用户登录名
28         string userName = Trim(fields[1]); //用户名称
29         string cardId = Trim(fields[2]); //身份证号
30         string sex = Trim(fields[3]);    //性别
31         string ustatus = Trim(fields[4]); //状态
32         string invalidTime = TimeToDbTime(Trim(fields[5])); //到期时间
33         string department = Trim(fields[6]); //所属部分信息
34         if (lineCount == 0)
35         {
36             lineCount++;
37             continue;
38         }
39 
40         lineCount++;
41         
42         //具体处理方法。。。
43     }
44     
45     return TRUE;
46 }
47 
48 /***
49 *        按指定字符截取字符串
50 */
51 void SplitString(const string& str, vector<string>& ret_, const string &sep)
52 {
53     if (str.empty())
54     {
55         return ;
56     }
57 
58     string tmp;
59     string::size_type pos_begin = 0;//str.find_first_not_of(sep);
60     string::size_type comma_pos = 0;
61 
62     while (pos_begin != string::npos)
63     {
64         comma_pos = str.find(sep, pos_begin);
65         if (comma_pos != string::npos)
66         {
67             tmp = str.substr(pos_begin, comma_pos - pos_begin);
68             pos_begin = comma_pos + sep.length();
69         }
70         else
71         {
72             tmp = str.substr(pos_begin);
73             pos_begin = comma_pos;
74         }
75 
76         ret_.push_back(tmp);
77     }
78 }
79 
80 /***
81 *        删除字符串中空格,制表符tab等无效字符
82 */
83 string Trim(string& str)
84 {
85     str.erase(0,str.find_first_not_of(" \t\r\n"));
86     str.erase(str.find_last_not_of(" \t\r\n") + 1);
87     return str;
88 }

 

更多内容请访问 www.uusystem.com

java读取csv文件示例分享(java解析csv文件)

java读取csv文件示例分享(java解析csv文件)

复制代码 代码如下:

import java.io.*;
import java.util.*;
public class HandleCsv {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(
   new InputStreamReader(
    new FileInputStream("test.csv")
   )
);

String line;
String name;
String age;
String birthday;
while ( (line = br.readLine()) != null ) {
   //System.out.println(line);
   String[] info = line.split(",");
   name = info[0].trim();
   age = info[1].trim();
   birthday = info[2].trim();
   System.out.print(name + "\t" + age + "\t" + birthday + "\n");
  }
 }
}


csv文件
复制代码 代码如下:

alice, 22, 1992/03/05
bob, 33, 1981/11/21
cart, 40, 1974/07/13

您可能感兴趣的文章:

我们今天的关于如何在php中上传和解析CSV文件php导入csv的分享已经告一段落,感谢您的关注,如果您想了解更多关于asp.net+js 实现无刷新上传解析csv文件的代码、c# – 如何在ASP.NET MVC3中上传和读取CSV文件、c++解析csv文件、java读取csv文件示例分享(java解析csv文件)的相关信息,请在本站查询。

本文标签:

上一篇多个javascript / css文件:最佳做法?(js设置多个css样式)

下一篇如何在服务器中的htaccess中更改php版本(phpstudy修改apache端口)