根据循环中另一个字典的值更新文本文件中的值

时间:2019-05-30 11:43:12

标签: c# algorithm

假设我有存储日志数据的文本文件

2019-03-01 20:00:18; Value1; Value2
2019-03-01 20:00:23; Value1; Value2
2019-03-01 20:00:28; Value1; Value2

我在字典中很有价值

ID = Value1
StartDateTime = 2019-03-01 20:00:18
OffDateTime = 2019-03-01 20:00:27
Value = 9

我想更新持续时间在StartDateTime和OffDateTime之间的文本文件中所有记录中的Value1。

在这种情况下,它将更新第一行和第二行。

现在我正在使用这个

if (textFileCurrentLineDateTime >= StartDateTime && textFileNextLineDateTime < OffDateTime)
{
   //this line need to update value
}

如果StartDateTime和OffDateTime的持续时间不超过1个记录,则可以正常工作。

1 个答案:

答案 0 :(得分:0)

   internal class Program
{
    private static Line CreateLineFromString(string line)
    {
        string[] array = line.Split(';');

        return new Line
        {
            DateTime = Convert.ToDateTime(array[0],CultureInfo.InvariantCulture),
            Value1 = array[1],
            Value2 = array[2]
        };
    }

    private static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");

        IEnumerable<Line> lines = ReadLines().ToList();

        var startDate = new DateTime(2019, 1, 1);
        var endDate = new DateTime(2019, 6, 30);

        foreach (Line line in lines.Where(line => line.DateTime >= startDate && line.DateTime <= endDate)) line.Value1 = "New Value";

        SaveLines(lines);
    }


    private static IEnumerable<Line> ReadLines()
    {
        using (var reader = new StreamReader("d:\\TextFile1.txt"))
        {
            string stringLine;
            while ((stringLine = reader.ReadLine()) != null)
                if (stringLine != string.Empty)
                    yield return CreateLineFromString(stringLine);

        }
    }

    private static void SaveLines(IEnumerable<Line> lines)
    {
        using (var writer = new StreamWriter("d:\\TextFile1.txt",false))
        {
            foreach (Line line in lines) writer.WriteLine(line.ToString());
        }
    }
}


public class Line
{
    public DateTime DateTime { get; set; }
    public string Value1 { get; set; }

    public string Value2 { get; set; }

    public override string ToString()
    {
        return $"{DateTime.ToString(CultureInfo.InvariantCulture)};{Value1};{Value2}";
    }
}