zoukankan      html  css  js  c++  java
  • csv文件与DataTable互相导入处理

    封装处理下,以后项目用到可以直接使用,比较简单。

    1.首先看封装好的类

    using System;

    using System.Data;

    using System.IO;

    using System.Text;

    using CSharpUtilHelpV2;

    using StringUtilHelp;

     

    namespace DBUtilHelpV2Plus

    {

        public static class DBToolV2Plus

        {

            /// <summary>

            /// 将DataTable导出到CSV.

            /// </summary>

            /// <param name="table">DataTable</param>

            /// <param name="fullSavePath">保存路径</param>

            /// <param name="tableheader">标题信息</param>

            /// <param name="columname">列名称『eg:姓名,年龄』</param>

            /// <returns>导出成功true;导出失败false</returns>

            public static bool ToCSV(this DataTable table, string fullSavePath, string tableheader, string columname)

            {

                ArgumentChecked(table, fullSavePath);

                //------------------------------------------------------------------------------------

                try

                {

                    string _bufferLine = "";

                    using (StreamWriter _writerObj = new StreamWriter(fullSavePath, false, Encoding.UTF8))

                    {

                        if (!string.IsNullOrEmpty(tableheader))

                            _writerObj.WriteLine(tableheader);

                        if (!string.IsNullOrEmpty(columname))

                            _writerObj.WriteLine(columname);

                        for (int i = 0; i < table.Rows.Count; i++)

                        {

                            _bufferLine = "";

                            for (int j = 0; j < table.Columns.Count; j++)

                            {

                                if (j > 0)

                                    _bufferLine += ",";

                                _bufferLine += table.Rows[i][j].ToString();

                            }

                            _writerObj.WriteLine(_bufferLine);

                        }

                        return true;

                    }

                }

                catch (Exception)

                {

                    return false;

                }

            }

            /// <summary>

            /// 参数检查

            /// </summary>

            /// <param name="table"></param>

            /// <param name="fullSavePath"></param>

            private static void ArgumentChecked(DataTable table, string fullSavePath)

            {

                if (table == null)

                    throw new ArgumentNullException("table");

                if (string.IsNullOrEmpty(fullSavePath))

                    throw new ArgumentNullException("fullSavePath");

                string _fileName = CSharpToolV2.GetFileNameOnly(fullSavePath);

                if (string.IsNullOrEmpty(_fileName))

                    throw new ArgumentException(string.Format("参数fullSavePath的值{0},不是正确的文件路径!", fullSavePath));

                if (!_fileName.InvalidFileNameChars())

                    throw new ArgumentException(string.Format("参数fullSavePath的值{0},包含非法字符!", fullSavePath));

            }

            /// <summary>

            /// 将CSV文件数据导入到Datable中

            /// </summary>

            /// <param name="table"></param>

            /// <param name="filePath">DataTable</param>

            /// <param name="rowIndex">保存路径</param>

            /// <returns>Datable</returns>

            public static DataTable AppendCSVRecord(this DataTable table, string filePath, int rowIndex)

            {

                ArgumentChecked(table, filePath);

                if (rowIndex < 0)

                    throw new ArgumentException("rowIndex");

                using (StreamReader reader = new StreamReader(filePath, Encoding.UTF8, false))

                {

                    int i = 0, j = 0;

                    reader.Peek();

                    while (reader.Peek() > 0)

                    {

                        j = j + 1;

                        string _line = reader.ReadLine();

                        if (j >= rowIndex + 1)

                        {

                            string[] _split = _line.Split(',');

                            DataRow _row = table.NewRow();

                            for (i = 0; i < _split.Length; i++)

                            {

                                _row[i] = _split[i];

                            }

                            table.Rows.Add(_row);

                        }

                    }

                    return table;

                }

            }

        }

    }

    2.代码使用测试

    using System;

    using System.Data;

    using DBUtilHelpV2;

    using DBUtilHelpV2Plus;

    namespace DBUtilHelpV2PlusTest

    {

        class Program

        {

            static DataTable testDb = null;

            static string fullSavePath = string.Format(@"C:{0}.csv", DateTime.Now.ToString("yyyyMMddHH"));

            static void Main(string[] args)

            {

                try

                {

                    CreateTestDb();

                    Console.WriteLine(string.Format("DataTable导出到CSV文件{0}.", testDb.ToCSV(fullSavePath, "姓名,年龄", "人员信息表") == true ? "成功" : "失败"));

                    testDb.Rows.Clear();

                    Console.WriteLine(string.Format("清空数据,当前{0}条数据.", testDb.Rows.Count));

                    testDb = testDb.AppendCSVRecord(fullSavePath, 2);

                    Console.WriteLine(string.Format("CSV文件导入到Datable,导入{0}条数据.", testDb.Rows.Count));

                }

                catch (Exception ex)

                {

                    Console.WriteLine(ex.Message);

                }

                finally

                {

                    Console.ReadLine();

                }

            }

            static void CreateTestDb()

            {

                if (testDb == null)

                {

                    testDb = DBToolV2.CreateTable("Name,Age|int");

                    for (int i = 1; i <= 10; i++)

                    {

                        DataRow _row = testDb.NewRow();

                        _row["Name"] = string.Format("YanZhiwei_{0}", i);

                        _row["Age"] = i;

                        testDb.Rows.Add(_row);

                    }

                }

            }

        }

    }

     

     

    佛为心,道为骨,儒为表,大度看世界; 技在手,能在身,思在脑,从容过生活; 三千年读史,不外功名利禄; 九万里悟道,终归诗酒田园;
  • 相关阅读:
    RMQ(非log2储存方法)
    2016年5月份学习记录
    NOIP200504循环
    膜拜acm大牛 虽然我不会这题,但是AC还是没有问题的~(转自hzwer)
    最长公共子序列的长度
    菜鸟,大牛和教主三者的区别(转自hzwer)
    NOIP201205Vigenère密码
    NOIP200503采药
    公路乘车
    NOIP200902分数线划定
  • 原文地址:https://www.cnblogs.com/taofx/p/4137638.html
Copyright © 2011-2022 走看看