循环遍历文件并创建对象。我该如何回复他们?

时间:2014-02-05 01:51:56

标签: c# file object csv

(变量赋值代码中的小错误,但现在不是那么重要) 我有一个CSV文件,我通过Excel打开。该文件包含多个服务(作业)。每个工作都有一个与之关联的公司代码。这是一个相当大的文件(最多可以达到5000行)。

分包商(船员)有几个字段,如他们的代码和他们的电子邮件地址。 service(job)有工作号,服务日期,服务描述等字段。

这是我想要完成的事情: 1)遍历电子表格中的每一行 2)在每次迭代中,我需要创建一个“作业”对象和一个“子承包商”对象(如果该公司尚不存在) 3)然后我需要将“作业”添加到与它们相关联的“分包商”对象中。

最后,我需要能够访问这些分包商并与他们相关联的服务,我将使用这些服务生成电子邮件,“嘿,这些是工作,这就是你需要的东西”。 这是我到目前为止的主要代码:

InitializeComponent();
string file = "myfile.csv";
fileAddress.Text = file;
var excel = new Excel.Application();
excel.Visible = false;
excel.Workbooks.Open(file);

Excel._Worksheet sheet = excel.ActiveSheet;

Dictionary<string, Crew> crews = new Dictionary<string, Crew>();
Crew crew;
string code;
string email;
string account;
string store;
string description;
string status;
DateTime serviceDate;
var sheetLength = sheet.UsedRange.Row;

for (int i = 0; i < sheetLength; i++)
{
    // empty cell means we are done with looping through the column
    if (String.IsNullOrEmpty(sheet.Range["B" + i + 1].Value))
    {
        break;
    }

    code = sheet.Range["I"].Value + i + 1;
    email = sheet.Range["BD"].Value + i + 1;
    account = sheet.Range["C"].Value + i + 1;
    store = sheet.Range["D"].Value + i + 1;
    description = sheet.Range["F"].Value + i + 1;
    status = sheet.Range["N"].Value + i + 1;
    serviceDate = sheet.Range["G"].Value + i + 1;

    if (crews.ContainsKey(code))
    {
        ???
    }
    else
    {
        crew = new Crew(code, email);
        crews.Add(code, crew);
    }
}

这就是我被困的地方:if(crews.ContainsKey(code)) 如果这个工作人员已经在集合中,我需要将当前服务添加到他的列表中。 这是Crew类的样子:

class Crew
{
    public Crew(string code, string email)
    {
        this.code = code;
        this.email = email;
    }

    public string code { get; private set; }
    public string email { get; private set; }
    List<Job> jobs;

    public void addService(Job job)
    {
        this.jobs.Add(job);
    }
}

这就是我正在使用的电子表格的样子: enter image description here 如果有更好(更快)的方式来组织这些数据,请告诉我。我想,逐行循环会大大减慢速度。

1 个答案:

答案 0 :(得分:2)

你错过了Job类的定义,所以我不能告诉你如何实例化它,但是一旦你拥有它,你只需要这样做:

if (crews.ContainsKey(code))
{
    // create job object
    crew = crews[code];
    crew.addService(job);

}
else
{
    crew = new Crew(code, email);
    crews.Add(code, crew);
}

请注意,当您第一次创建工作人员时,可能意味着已经有工作,在这种情况下执行此操作

if (!crews.ContainsKey(code))
{
    crew = new Crew(code, email);
    crews.Add(code, crew);
}
// create job object
crew = crews[code];
crew.addService(job);

注意条件中的爆炸(!),如果船员不存在则创建它,但无论哪种方式,一旦我们确定船员存在,我们就添加工作。