操纵数据线

Bri*_*now 15 c# database text-files

我每秒更新数据生成数百万行,如下所示:

104500 4783
104501 8930
104502 21794
104503 21927
104505 5746
104506 9968
104509 5867
104510 46353
104511 7767
104512 4903
Run Code Online (Sandbox Code Playgroud)

左侧的列表示时间(hhmmss格式),右侧的列表示逐秒更新的数据.然而,正如你所看到的,它实际上不是秒,并且有一些缺失的时间(本例中缺少10:45:04,10:45:07,10:45:08).我的目标是添加丢失的秒数,并使用前一秒的数据来表示缺少的秒数,如下所示:

104500 4783
104501 8930
104502 21794
104503 21927
104504 21927 --
104505 5746
104506 9968
104507 9968 --
104508 9968 --
104509 5867
104510 46353
104511 7767
104512 4903
Run Code Online (Sandbox Code Playgroud)

我不想在结果中使用" - ",我只是把它们放在那里以标记添加的行.到目前为止,我已经尝试使用StreamReader和StreamWriter来实现这一点,但似乎他们不会得到我想要的东西.我是新手程序员和C#的新手,所以如果你能指出我正确的方向,那就太棒了.我真的只是想知道在C#中是否可以做到这一点......我花了很多时间在MSDN上,在这里寻找解决方案,但到目前为止还没有找到任何解决方案.

编辑:行在文本文件中,我想将新创建的数据存储在新的文本文件中.

Myl*_*ell 3

好的,这是整个射击比赛,经过测试并根据您的测试数据进行操作:

public void InjectMissingData()
{
    DataLine lastDataLine = null;
    using (var writer = new StreamWriter(File.Create("c:\\temp\\out.txt")))
    {
        using (var reader = new StreamReader("c:\\temp\\in.txt"))
        {
            while (!reader.EndOfStream)
            {
                var dataLine = DataLine.Parse(reader.ReadLine());

                while (lastDataLine != null && dataLine.Occurence - lastDataLine.Occurence > TimeSpan.FromSeconds(1))
                {
                    lastDataLine = new DataLine(lastDataLine.Occurence + TimeSpan.FromSeconds(1), lastDataLine.Data);
                    writer.WriteLine(lastDataLine.Line);
                }

                writer.WriteLine(dataLine.Line);

                lastDataLine = dataLine;
            }
        }
    }
}

public class DataLine
{
    public static DataLine Parse(string line)
    {
        var timeString = string.Format("{0}:{1}:{2}", line.Substring(0, 2), line.Substring(2, 2),
                                       line.Substring(4, 2));

        return new DataLine(TimeSpan.Parse(timeString), long.Parse(line.Substring(7, line.Length - 7).Trim()));
    } 

    public DataLine(TimeSpan occurence, long data)
    {
        Occurence = occurence;
        Data = data;
    }

    public TimeSpan Occurence { get; private set; }
    public long Data { get; private set; }

    public string Line
    {
        get { return string.Format("{0}{1}{2} {3}", 
            Occurence.Hours.ToString().PadLeft(2, Char.Parse("0")), 
            Occurence.Minutes.ToString().PadLeft(2, Char.Parse("0")), 
            Occurence.Seconds.ToString().PadLeft(2, Char.Parse("0")),
            Data); }
    }
}
Run Code Online (Sandbox Code Playgroud)