zoukankan      html  css  js  c++  java
  • 将txt转为DataTable的方法

            public static byte[] GetFileData(string fileUrl)
            {
                FileStream fs = new FileStream(fileUrl, FileMode.Open, FileAccess.Read);
                try
                {
                    byte[] buffur = new byte[fs.Length];
                    fs.Read(buffur, 0, (int)fs.Length);
    
                    return buffur;
                }
                catch
                {
                    return null;
                }
                finally
                {
                    if (fs != null)
                    {
                        fs.Close();
                    }
                }
            }
            public static DataTable CreateDataTableFromFile(string strFilePath)
            {
                byte[] importFile = GetFileData(strFilePath);
                DataTable dt = new DataTable();
                var cb = new DelimitedClassBuilder("temp", ",") { IgnoreFirstLines = 0, IgnoreEmptyLines = true, Delimiter = "," };
                var ms = new MemoryStream(importFile);
                var sr = new StreamReader(ms, Encoding.Default);
                var headerArray = sr.ReadLine().Split(',');
                foreach (var header in headerArray)
                {
                    cb.AddField(header, typeof(string));
                    cb.LastField.FieldQuoted = true;
                    cb.LastField.QuoteChar = '"';
                }
                var classType = cb.CreateRecordClass();
                return ReadDataTableFromStream(classType, sr);
            }
            public static DataTable ReadDataTableFromStream(Type classType, StreamReader sr)
            {
                // Build an array of dynamic parameters
                var classTypes = new Type[] { classType };            // Construct our generic type
                var engineGenericType = typeof(FileHelperEngine<>);
                var engineType = engineGenericType.MakeGenericType(classTypes);
                var engine = Activator.CreateInstance(engineType);
                //return engine.ReadStream(sr)
                var engineReadStreamMethod = engineType.GetMethod("ReadStream", new Type[] { typeof(TextReader) });
                var engineReadStreamArgs = new object[] { sr };
                var engineReadStreamResult = engineReadStreamMethod.Invoke(engine, engineReadStreamArgs);
                //return engine.ToDataTable()
                var toDataTableType = typeof(FileHelpers.ExtensionsFileHelpers);
                var toDataTableMethod = toDataTableType.GetMethod("ToDataTable");
                var toDataTableGeneric = toDataTableMethod.MakeGenericMethod(new Type[] { classType });
                var toDataTableArgs = new object[] { engineReadStreamResult };
                var toDataTableResult = toDataTableGeneric.Invoke(null, toDataTableArgs);
                return (DataTable)toDataTableResult;
            }
            static void Main(string[] args)
            {
                string strPath = @"C:softa.txt";
                DataTable dt = CreateDataTableFromFile(strPath);
                int intTotalCount = dt.Rows.Count;
            }

    提示:需要引用FileHelpers控件,引用方法为:

     Install-Package FileHelpers



    https://stackoverflow.com/questions/4585726/readstreamasdt-filehelpers-and-c-sharp-how-do-i-dynamically-read-in-a-csv-us

    https://github.com/MarcosMeli/FileHelpers/issues/273
  • 相关阅读:
    Infopath Notify 弹出提示信息
    window.showModalDialog 返回值
    【转】获得正文内容中的所有img标签的图片路径
    Json Datable Convert
    Sharepoint 列表 附件 小功能
    Surgey 权限更改
    SQL 触发器用于IP记录转换
    Caml语句 查询分配给当前用户及当前组
    jquery 1.3.2 auto referenced when new web application in VSTS2010(DEV10)
    TFS diff/merge configuration
  • 原文地址:https://www.cnblogs.com/wjx-blog/p/8654811.html
Copyright © 2011-2022 走看看