簡體   English   中英

使用FileHelperAsyncEngine崩潰無一例外

[英]Use FileHelperAsyncEngine crashed with no exception

我正在使用FileHelpers引擎FileHelperAsyncEngine<T> 讀取具有超過500,000行的大型CSV文件,我需要提取一些字段以填寫SHP文件(ArcGIS)。

但是,當我使用BeginReadFile並嘗試選擇一些數據時,即使我已完成獲取全局異常的操作,應用程序也不會發生任何異常崩潰。 但是沒有任何異常實現,我在讀取線程的地方打印了CSV行。

程序崩潰時,日志文件中的最后一行每次都不同。

這是我的代碼:

1.使用FileHelpersEngine的方法

public Dictionary<int, double> FetchByStepIndex(int stepindex)
{
    try
    {
        using (var engine = new FileHelperAsyncEngine<Mike2DDynamicData>())
        {
            using (engine.BeginReadFile(CsvPath))
            {
                var temp=new Dictionary<int, double>();
                foreach (var itemData in engine)
                {
                    if (itemData.StepIndex != stepindex) continue;
                    temp.Add(itemData.ElementID,double.Parse(itemData.TotalWaterDepth));
                    LogHelper.WriteLog(
                        itemData.StepIndex + "_" + itemData.ElementID + "_" + itemData.TotalWaterDepth,
                        LogMessageType.Info);
                }
                /* The codes when not debugging like ↓
                var temp = engine.Where(w => w.StepIndex == stepindex)
                    .Select(s => new { s.ElementID, s.TotalWaterDepth })
                    .ToDictionary(d => d.ElementID, d => d.TotalWaterDepth);
                    */
                engine.Close();
                return temp;
            }
        }
    }
    catch (FileHelpersException e)
    {
        throw e;
    }
}

2.Class:Mike2DDynamicData:

[DelimitedRecord(",")]
[IgnoreFirst]
public class Mike2DDynamicData
{
    public int StepIndex;

    [FieldNullValue(typeof(DateTime),"2017-1-1 00:00:00")]
    [FieldConverter(ConverterKind.Date,"yyyy-MM-dd HH:mm:ss")]
    public DateTime Time;
    public int ElementID;

    [FieldValueDiscarded]
    public string SurfaceElevation;

    public string TotalWaterDepth;

    [FieldValueDiscarded] public string CurrentSpeed;
}

對於您簡單的csv文件,使用第三部分dll是不值得的麻煩。 只需自己編寫代碼。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.csv";
        static void Main(string[] args)
        {
            new Mike2DDynamicData(FILENAME);
        }
    }
    public class Mike2DDynamicData
    {
        public static List<Mike2DDynamicData> data = new List<Mike2DDynamicData>();


        public int StepIndex;

        public DateTime Time;
        public int ElementID;

        public string SurfaceElevation;

        public string TotalWaterDepth;

        public string CurrentSpeed;

        public Mike2DDynamicData() { }
        public Mike2DDynamicData(string filename)
        {

            StreamReader reader = new StreamReader(filename);

            string inputline = "";
            int lineNumber = 0;
            while((inputline = reader.ReadLine()) != null)
            {
                if (++lineNumber > 1)
                {
                    string[] splitArray = inputline.Split(new char[] { ',' });

                    Mike2DDynamicData newRow = new Mike2DDynamicData();
                    data.Add(newRow);

                    newRow.StepIndex = int.Parse(splitArray[0]);
                    newRow.Time = DateTime.Parse(splitArray[1]);
                    newRow.ElementID = int.Parse(splitArray[2]);
                    newRow.SurfaceElevation = splitArray[3];
                    newRow.TotalWaterDepth = splitArray[4];
                    newRow.CurrentSpeed = splitArray[5];

                }
            }
        }



    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM