Написать CSV-файл с использованием библиотеки CSVhelper - PullRequest
1 голос
/ 16 февраля 2020

Я использую следующий код и получаю исключение,

 Exception thrown: 'CsvHelper.WriterException' in CsvHelper.dll on this line executed:

csv.WriteRecord(item);

Это больше кода:

using (var memoryStream = new MemoryStream())
{
    using (var writer = new StreamWriter(memoryStream))
    {
        using (var csv = new CsvHelper.CsvWriter(writer, System.Globalization.CultureInfo.CurrentCulture))
        {
            foreach (var item in csvData)
            {
                csv.WriteRecord(item); // Exception thrown here
            }
        }
    }

    var arr = memoryStream.ToArray();
    //js.SaveAs("people.csv", arr);  what type object is js? copied from the stackoverflow answer linked here
}

Это код csvData:

IEnumerable<DateLowHigh> csvData = stocks.candles
    .Select(c => new DateLowHigh
    {
        Time = c.datetime,
        Close = c.close,
        Low = c.low,
        High = c.high
    })
    .ToList();

Я получаю csvData.

Этот стекопоток ответ помог мне начать работу.

Ответы [ 2 ]

2 голосов
/ 16 февраля 2020

Я не знаю, почему вам нужно использовать CsvHelper, когда вы можете легко сделать то же самое с библиотекой ввода-вывода.

sing 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)
        {
            Stocks stocks = new Stocks();

            IEnumerable<DateLowHigh> csvData = stocks.candles.Select(c => new DateLowHigh
            {
                Time = c.datetime,
                Close = c.close,
                Low = c.low,
                High = c.high
            }).ToList();

            MemoryStream memoryStream = new MemoryStream();
            using (var writer = new StreamWriter(memoryStream))
            {
                string[] headers = {"Time", "Close", "Low", "High"};
                writer.WriteLine(string.Join(",", headers));
                foreach (var item in csvData)
                {
                    writer.WriteLine(string.Join(",", new string[] { item.Time.ToString(), item.Close, item.Low.ToString(), item.High.ToString() }));
                }  
            }
            memoryStream.Position = 0;
        }
    }
    public class Stocks
    {
        public List<Candle> candles { get; set; }
    }
    public class Candle
    {
        public DateTime datetime { get; set; }
        public string close { get; set; }        
        public int low { get; set; }
        public int high { get; set; }
    }
    public class DateLowHigh
    {
        public DateTime Time { get; set; }
        public string Close { get; set; }
        public int Low { get; set; }
        public int High { get; set; }
    }
}
0 голосов
/ 19 февраля 2020

Чтобы ответить на ваш вопрос о том, какой тип объекта js находится в js.SaveAs("people.csv", arr);, вероятно, Microsoft.JSInterop.IJSRuntime, как показано в этом Blazer HowTo . Вопрос StackOverflow, на который вы ссылались, скорее всего, использовал его, чтобы получить доступ к JavaScript, который они могли использовать в C# коде. Если вы просто хотите сохранить файл CSV с помощью CsvHelper, это может быть так просто:

using (var writer = new StreamWriter("path\\to\\file.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{    
    csv.WriteRecords(csvData);
}

Если вы все еще получаете ошибки, вам нужно будет опубликовать полное исключение со StackTrace, чтобы помочь дальнейшему ,

...