gpt4 book ai didi

c# - 从 csv 读取到对象 [] C#

转载 作者:行者123 更新时间:2023-12-02 20:20:34 25 4
gpt4 key购买 nike

我正在尝试从 .csv 文件读取对象数组。

这里还有其他解决方案可以为列表提供解决方案,但我似乎无法让它为我工作。

对象定义:

public class DTOClass
{
//declare data members
[DataMember]
public DateTime Date { get; set; }
[DataMember]
public string stock_symbol { get; set; }
[DataMember]
public double stock_price_open { get; set; }
[DataMember]
public double stock_price_close { get; set; }
[DataMember]
public double stock_price_low { get; set; }
[DataMember]
public double stock_price_high { get; set; }
[DataMember]
public double stock_price_adj_close { get; set; }
[DataMember]
public long stock_volume { get; set; }
[DataMember]
public string stock_exchange { get; set; }
}

实例声明:

private DTOClass[] _dTOs;

过滤方法:

private List<DTOClass> FromCsv(string csvLine, List<DTOClass> rest)
{
DataTable _dt = new DataTable();

string[] values = csvLine.Split(',');

int j = _dt.Rows.Count;
for (int i = 0; i < j; i++)
{
DTOClass dto = new DTOClass();

dto.Date = Convert.ToDateTime(values[0]);
dto.stock_symbol = Convert.ToString(values[1]);
dto.stock_price_open = Convert.ToDouble(values[2]);
dto.stock_price_close = Convert.ToDouble(values[3]);
dto.stock_price_low = Convert.ToDouble(values[4]);
dto.stock_price_high = Convert.ToDouble(values[5]);
dto.stock_price_adj_close = Convert.ToDouble(values[6]);
dto.stock_volume = Convert.ToInt64(values[7]);
dto.stock_exchange = Convert.ToString(values[8]);

rest.Add(dto);
}

return rest;
}

调用过滤器:

DTO = File.OpenText(Filename).ReadLine().Select(v => FromCsv(v.ToString(), 
_restDto)).ToArray();

我需要它返回一个对象数组,因为它随后会进入数据网格上的 CollectionView。

但我一直收到这个错误:

“无法将类型‘System.Collections.Generic.List[]’隐式转换为‘MBM.Services.DTOClass[]’”

我知道我显然会返回一个列表的列表,但我已经尝试了提供的其他方法,但我只是被难住了。

我也试过这个:

private static DataTable GetDataTableFromCSVFile(string csv_file_path)
{
DataTable csvData = new DataTable();

try
{
using (TextFieldParser csvReader = new TextFieldParser(csv_file_path))
{
csvReader.SetDelimiters(new string[] { "," });
//csvReader.HasFieldsEnclosedInQuotes = true;
string[] colFields = csvReader.ReadFields();

foreach (string column in colFields)
{
DataColumn datecolumn = new DataColumn(column);
datecolumn.AllowDBNull = true;
csvData.Columns.Add(datecolumn);
}

while (!csvReader.EndOfData)
{
string[] fieldData = csvReader.ReadFields();
//Making empty value as null
for (int i = 0; i < fieldData.Length; i++)
{
if (fieldData[i] == "")
{
fieldData[i] = null;
}
}

csvData.Rows.Add(fieldData);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

return csvData;
}

调用方式:

DataTable csvData = GetDataTableFromCSVFile(Filename);

但这似乎没有从文件中返回任何内容。

感谢任何帮助,谢谢。

最佳答案

一种简单的方法是拆分线条并将它们选择到您的新对象中。

var result = File.ReadAllLines("pathTo.csv")
.Select(line => line.Split(','))
.Select(x => new MyObject {
prop1 = x[0],
prop2 = x[1],
//etc..
})
.ToArray();

关于c# - 从 csv 读取到对象 [] C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51493850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com