【问题标题】:Get first value in column from CSV file in C#从 C# 中的 CSV 文件中获取列中的第一个值
【发布时间】:2013-10-29 14:43:46
【问题描述】:

我在我的 Web Api 中使用此代码从 csv 文件中获取数据,并将该数据插入到项目列表中。

 private List<Item> ietms = new List<Item>();

        public ItemRepository()
        {
            string filename = HttpRuntime.AppDomainAppPath + "App_Data\\items.csv";

            var lines = File.ReadAllLines(filename).Skip(1).ToList();

            for (int i = 0; i < lines.Count; i++)
            {
                var line = lines[i];

                var columns = line.Split('$');

                //get rid of newline characters in the middle of data lines
                while (columns.Length < 9)
                {
                    i += 1;
                    line = line.Replace("\n", " ") + lines[i];
                    columns = line.Split('$');
                }

                //Remove Starting and Trailing open quotes from fields
                columns = columns.Select(c => { if (string.IsNullOrEmpty(c) == false) { return c.Substring(1, c.Length - 2); } return string.Empty; }).ToArray();



                items.Add(new Item()
                {
                    Id = int.Parse(columns[0]),
                    Name = columns[1],
                    Description = columns[2],
                    Price = string.IsNullOrEmpty(columns[3].Trim()) ? null : (double?)double.Parse(columns[3]),
                    Weight = columns[8],
                    PhotoUrl = columns[7],
                    Category=columns[9]



                });
            }
        }

在 csv 文件中,其中一列/值的结构如下:

Groups>Subgroup>item

或者在某些情况下

MajorGroup|Groups>Subgroup>item

如何只提取 > 或 | 之前的第一个值,以便在第一种情况下获得 Groups 的值,在第二种情况下获得 MajorGroup 的值,并将其存储在 Category 属性中在项目列表中,现在只是设置为第 9 列中的整个值,这将返回整个字符串“Groups>Subgroup>item”。

【问题讨论】:

标签: c# visual-studio-2012 csv asp.net-web-api


【解决方案1】:

在调用“添加项目”之前添加以下行

var temp = columns[9].Split('|', '>');   

然后按如下方式分配类别。

Category = temp[0];

基于:MSDN String Method Documentation

【讨论】:

【解决方案2】:

你的意思是这样的吗?

string data = "MajorGroup|Groups>Subgroup>item";
string groupOrCategory;

if (data.Contains('|'))
{
    groupOrCategory = data.Substring(0, data.IndexOf('|'));
}
else
{
    groupOrCategory = data.Substring(0, data.IndexOf('>'));
}

Console.WriteLine(groupOrCategory);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 2019-08-15
    相关资源
    最近更新 更多