【问题标题】:Trying to properly set up query for match of 2 csv files got stuck尝试正确设置 2 个 csv 文件匹配的查询被卡住了
【发布时间】:2021-06-17 19:22:06
【问题描述】:

以下是每个 csv 上数据的示例。

inventory.csv

ID, payment, Receipt#                                 
90006, VISA, jk73kl_                          
90006, VISA, null                             

inventory.csv

INFO, VIEWS, DATE
9006_Produce_Banana_jk73kl__, 0, 10-13-20
9006_Produce_Banana, 0, 10-13-20 

我的位置有问题,我需要搜索这两个表格,如果有匹配的收据编号,请将它们拉出来并合并这两行。

using System;
using System.Collections.Generic;
using System.Linq;


namespace ConsoleApp1
{
    class Program
    {
        static void Main()
        {
            string[] ourDataSheet = System.IO.File.ReadAllLines(@"../../OurData.csv");
            string[] theirDataSheet = System.IO.File.ReadAllLines(@"../../TheirData.csv");
            string ourDataHeaders = ourDataSheet[0];
            string theirDataHeaders = theirDataSheet[0];
            

            IEnumerable<string> TrackingQuery =
                from ourData in ourDataSheet
                let ourDataFields = ourData.Split(',')
                from theirData in theirDataSheet
                let theirDataFields = theirData.Split(',')
                where theirDataFields[0].EndsWith(ourDataFields[2])
                select ourDataFields[0] + "," + ourDataFields[1] + "," + ourDataFields[2] + "," + theirDataFields[0] + "," + theirDataFields[0] + "," + theirDataFields[1] + "," + theirDataFields[2] + "," + theirDataFields[3];

            OutPutResults(TrackingQuery);

            Console.ReadKey();
        }

        static void OutPutResults(IEnumerable<string> query)
        {
            foreach(string item in query)
            {
               Console.WriteLine(item);
               Console.Read();
               
            }
        }
    }
}

【问题讨论】:

    标签: c# csv csvhelper


    【解决方案1】:

    首先,我建议您使用像 CsvHelper 这样的第三方软件包并执行以下操作

    public class Sale
    {
        public int ID { get; set; }
        public string Payment { get; set; }
        [Name("Recipt#")]
        public string Recipt { get; set; }
    }
    
    public class Inventory
    {
        public string INFO { get; set; }
        public string VIEWS { get; set; }
        public string DATE { get; set; }
    }
    
    IEnumerable<Sale> sales;
    IEnumerable<Inventory> inventory;
    
    using (var reader = new StreamReader(@"../../OurData.csv"))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        sales = csv.GetRecords<Sale>();
    }
    
    using (var reader = new StreamReader(@"../../TheirData.csv"))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        inventory = csv.GetRecords<Inventory>();
    }
    
    var results = sales.Where(s => inventory.Any(i => i.INFO.EndsWith(s.Recipt)));
    

    【讨论】:

    • 在我的 inventory.csv 中,或者第三列的 null 和空白值。我应该如何处理空白的第三列?我是否应该通过一个函数运行库存结果以提取所有空白或第三列的行,然后运行它。向结果函数添加一个额外的步骤或将类设置为具有默认值?
    猜你喜欢
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多