请参阅此示例数据:
# |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行中可用的最后日期填充的字段。
例如:
非常感谢任何逻辑推荐。
编辑:澄清 - 上面公布的数据目前存储在列表中。我需要帮助的是提出如何解决我的问题的逻辑。
答案 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列的空白值。
编译,测试和工作。