填充列表中列的空元素

时间:2015-07-06 18:40:17

标签: c# arrays list

请参阅此示例数据:

# |IDNum |Date     |data |SomeDate |TranCode
1|888888| 12/16/10|aaaaa|         |a10
2|888888| 12/16/10|bbbbb| 11/16/15|a8
3|888888| 12/16/10|ccccc|         |a11
4|888888| 11/16/10|aaaaa|         |a6
5|888888| 11/16/10|bbbbb|         |a5
6|888888| 11/16/10|ccccc| 10/16/15|a9
7|888888| 11/16/10|aaaaa|         |a11
8|888888| 11/15/10|bbbbb|         |a3
9|888888| 10/16/10|ccccc|         |a6
10|888888| 10/16/10|aaaaa|         |a5
11|888888| 10/16/10|bbbbb| 09/16/15|a9
12|888888| 10/16/10|ccccc|         |a11
13|888888| 09/16/10|aaaaa|         |a6
14|888888| 09/16/10|bbbbb| 08/16/15|a5
15|888888| 09/16/10|ccccc|         |a9
16|111111| 03/02/15|aaaaa|         |a9
17|111111| 02/27/15|bbbbb| 12/01/15|a6
18|111111| 02/10/15|ccccc|         |a1
19|111111| 02/01/15|aaaaa|         |a10
20|111111| 02/01/15|bbbbb| 11/01/15|a9
21|111111| 01/05/15|ccccc|         |a10
22|111111| 01/05/15|aaaaa| 10/01/15|a9
23|111111| 12/31/14|bbbbb|         |a12
24|111111| 12/30/14|ccccc|         |a2
25|111111| 12/01/14|aaaaa|         |a6
26|111111| 12/01/14|bbbbb| 10/01/15|a10

我将上述数据存储为由管道分隔的列表,并按日期降序排序。我需要" SomeDate"使用该特定IDNumber行中可用的最后日期填充的字段。

例如:

  • 第1行应显示11/16/15的日期。
  • 第3行:5应显示日期为10/16/15。
  • 第7:10行应显示日期为09/16/15
  • 第15行应显示没有日期,因为该IDNum没有前一个日期。
  • 第16行应显示12/01/15的日期

非常感谢任何逻辑推荐。

编辑:澄清 - 上面公布的数据目前存储在列表中。我需要帮助的是提出如何解决我的问题的逻辑。

1 个答案:

答案 0 :(得分:1)

以下是如何解决此问题的完整说明。请注意,我将示例数据放入C:\ test \ sample.txt以便于使用。

public class FileData
{
    public string ID { get; set; }
    public string IDNum { get; set; }
    public string Date { get; set; }
    public string Data { get; set; }
    public string SomeDate { get; set; }
    public string TranCode { get; set; }
}

public class ReadFile
{
    public string SampleFile = @"C:\test\sample.txt";


    public ReadFile()
    {
        StreamReader reader = new StreamReader(SampleFile);
        string sampleFile = reader.ReadToEnd();
        reader.Close();

        string[] lines = sampleFile.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
        string previousDate = "";
        List<FileData> fileDatas = new List<FileData>();

        for (int i = lines.Length - 1; i >= 0; i--)
        {
            FileData data = new FileData();
            string[] columns = lines[i].Split('|');
            data.ID = columns[0].Trim();
            data.IDNum = columns[1].Trim();
            data.Date = columns[2].Trim();
            data.Data = columns[3].Trim();
            string someDate = columns[4].Trim();
            if (someDate.Equals(""))
            {
                data.SomeDate = previousDate;
            }
            else
            {
                previousDate = someDate;
                data.SomeDate = someDate;
            }
            data.TranCode = columns[5].Trim();
            fileDatas.Add(data);
        }
    }
}

请注意我创建了一个&#34; FileData&#34;用于存储值的类。

另请注意,我正在向后查看此数据,因为通过这种方式分配日期会更容易。

这是做什么的:

这会将文件中的所有数据读入字符串。然后该字符串按行结束(\ r \ n)分割。

一旦你有了一个行列表,我们就会通过它进行BACKWARDS(int i = lines.length - 1; i&lt; 0; i - )。

向后看,我们只是分配数据,除了&#34; somedate&#34;柱。在这里,我们检查somedate是否有值。如果是,我们分配一个&#34; previousDate&#34;变量该值,然后赋值。如果它没有值,我们使用previousDate中的值。这可以确保它会适当地改变。

这个问题实际上是数据的一个潜在问题。如果文件末尾没有日期,则在您第一次遇到日期之前,您将拥有SomeDate列的空白值。

编译,测试和工作。