迭代工作列表以打印职位,姓名,雇主,职位和核心能力

时间:2017-03-06 04:09:02

标签: c# csv dictionary

我在我的Program.cs文件中有一个我正在尝试实现的方法。当方法迭代一个作业列表(每个作业都是一个字典)时,它应该打印:

*****
name: Data Scientist / Business Intelligence
employer: Bull Moose Industries
location: Saint Louis
position type: Sr. IT Analyst (Data/BI)    
core competency: Statistical Analysis
***** 

文件job_data.csv包含我需要的所有工作信息:

name,employer,location,position type,core competency
Junior Data Analyst,Lockerdome,Saint Louis,Data Scientist / Business Intelligence,Statistical Analysis
Project Coordinator Support,Maritz,Saint Louis,Technical Assistant / User Support,Non-coding
Junior Web Developer,Cozy,Portland,Web - Front End,Ruby
Junior Developer 3,LiveAnswer,South Florida,Web - Full Stack,Java
Full Stack Engineer,Splitwise,Rhode Island,Web - Full Stack,Ruby
Customer Experience,Splitwise,Rhode Island,Project Manager / Analyst,Non-coding
IT Support Specialist,Viamontech,South Florida,Technical Assistant / User Support,Non-coding
C#/.net Developer ,Hunter Engineering,Saint Louis,Software / Enterprise Developer,.Net
Junior Developer,"TruckMovers.com, Inc.",Kansas City,Web - Full Stack,Python

......依此类推(总共有99行)。我需要做的是编写PrintJobs方法,使其到达job_data.csv并打印出标签:

name: 
employer:
location:
position type:
core competency: 

后面是每行中的相应项目。因此,例如,印刷线10将如下所示:

*****
name: Junior Developer
employer: "TruckMovers.com, Inc."
location: Kansas City
positon type: Web - Full Stack
core competency: Python
*****

我该怎么做?该方法的入门代码是:

private static void PrintJobs(List<Dictionary<string, string>> someJobs)
{
        Console.WriteLine("printJobs is not implemented yet");
}

我不完全确定参数someJobs的来源。这也是我给出的提示:

要执行此操作,您需要迭代作业列表。每个工作本身就是一个字典。虽然您可以使用已知密钥(“雇主”,“位置”等)从字典中获取每个项目,但请考虑创建嵌套循环以循环遍历每个字典。您将需要使用Dictionary.Keys属性来执行此操作。如果在作业记录中添加了新字段,则此方法将打印出新字段,而不会对PrintJobs进行任何更新。

根据提示,我猜我需要做类似的事情:

private static void PrintJobs(List<Dictionary<string, string>> someJobs)
    {

    //match up index value with label, write label + value 

    if (i = [0])
        {Console.WriteLine("name: "); + string someJobs}

    else if (i = [1])
        {Console.WriteLine("employer: "); + string someJobs}

    else if (i = [2])
        {Console.WriteLine("location: "); + string someJobs}

    else if (i = [3])
        {Console.WriteLine("positon type: "); + string someJobs}

    else if (i = [4])
        {Console.WriteLine("core competencey: "); + string someJobs}

    }

我试过这个并仍然收到消息:

printJobs is not implemented yet        

在C#完成初学者 完整代码的链接:

Program.csJobData.csjob_data.csv

2 个答案:

答案 0 :(得分:2)

我没有看到您的完整代码,但就我理解您的问题而言,您希望打印csv的数据,如下文所述

*****
name: Junior Developer
employer: "TruckMovers.com, Inc."
location: Kansas City
positon type: Web - Full Stack
core competency: Python
*****

您可以通过以下方式轻松使用LINQ来实现此目的:

  var result = File.ReadAllLines(csvPath)
               .Skip(1)//skipping first line because they are headers
               .Select(x => x.Split(','))
               .Select(x => new
               {
                   Name = x[0],
                   employer = x[1],
                   location = x[2],
                   position_type = x[3],
                   core_competency = x[4]
               });
        foreach (var item in result)
        {
            Console.WriteLine("Name: " + item.Name+"\n");
            //...
            Console.WriteLine("Position Type: " + item.position_type);
        }

代码将根据您的需要打印数据。如果你想要别的东西,请告诉我。

这是一个经过测试的代码,它可以运行。

答案 1 :(得分:1)

我最初认为我需要做的工作已经在Program.cs的main方法中完成了。至于为什么我仍然收到消息:printJobs is not implemented yet,C#编译并运行代码的最后一个工作版本,如果它发现任何构建错误。由于我的代码有几个构建错误,因此在我进行任何更改之前它运行的是最新版本。此外,在我保存并再次运行项目之前,我需要重新启动模块(x-out)。

就实现PrintJobs而言,我需要创建一个嵌套的foreach循环。第一个foreach到达Dictionary中的字符串,这些字符串位于列表someJobs中,第二个foreach到达字符串pair,该字符串存储在item中。程序自动知道someJobs是一个列表,因为它在它之前声明了。

private static void PrintJobs(List<Dictionary<string, string>> someJobs)
    {
        foreach(Dictionary<string,string> item in someJobs)
        {
            foreach (KeyValuePair<string, string> pair in item) {
                Console.WriteLine(string.Format("{0} {1}", pair.Key, pair.Value));
            }
        }

        //Console.WriteLine("printJobs is not implemented yet");
    }