C# 为每个文件的各种采样率创建一次参考

C# 为每个文件的各种采样率创建一次参考,c#,C#,我的程序读取包含以不同速率采样的时间/值对的多个文件。我尝试使用具有最高采样率的文件作为所有采样率的时间刻度,并从最高采样率文件输出一个具有唯一时间值的主文件 每个文件都包含时间/值对,如: 1,58 1.5,90 2154 2.5,34 以下是我目前的代码: public void ReadAndWrite(string[] fileNames) { var stopwatch = Stopwatch.StartNew(); List<StreamReader> r

我的程序读取包含以不同速率采样的时间/值对的多个文件。我尝试使用具有最高采样率的文件作为所有采样率的时间刻度,并从最高采样率文件输出一个具有唯一时间值的主文件

每个文件都包含时间/值对,如:

1,58

1.5,90

2154

2.5,34

以下是我目前的代码:

public void ReadAndWrite(string[] fileNames)
{
    var stopwatch = Stopwatch.StartNew();
    List<StreamReader> readers = fileNames.Select(f => new StreamReader(f)).ToList();

    try
    {
        using (StreamWriter writer = new StreamWriter(tbxOutputFile.Text))
        {
            string line = null;

            // For each measurement in max measurements
            for (int measNum = 0; measNum < numOfRows; measNum++)
            {                        
                // For each file's reader
                for (int i = 0; i < readers.Count; i++)
                {
                    // If line contains something, then add it to line
                    if ((line = readers[i].ReadLine()) != null)
                    {                           
                        // Process line and then write it to file
                        line = ProcessLine(line);
                        writer.Write(line);
                    }
                    else
                    {
                        writer.Write("");
                    }
                    // If it's not the last column, add delimiter
                    if (i < readers.Count - 1)
                        writer.Write(",");
                }
                writer.WriteLine();

                // Update labels
                int val = ((measNum + 1) * 100) / numOfRows;
                string newText = Convert.ToString("Progress: " + val + "% " + "     " + "Measurement #: " + (measNum + 1)
                    + " out of " + numOfRows); // running on worker thread
                this.Invoke((MethodInvoker)delegate
                {
                    // runs on UI thread
                    lblStatus.Text = newText;                            
                    progressBar1.Value = val;
                });
            }
        }
    }
    catch (Exception)
    {

        throw;
    }
    finally
    {
        foreach (var reader in readers)
        {
            reader.Close();
        }
    }
    MessageBox.Show("File successfully created! " + '\n' + "Elapsed time: " + 
        (stopwatch.ElapsedMilliseconds/1000) + " seconds", "Processing Complete");            
}

执行此伪代码以对所有不同采样率进行唯一时间引用的最佳方法是什么?很抱歉,如果我的问题让人困惑,我可以在需要时详细说明。

为了清楚这一点,您不希望在特定时间出现值,但希望在最高采样源的每个时间点为每个源显示一个值?
这应该很简单。在伪代码中:

foreach(highSampleRateValues中的ValuePair val){
var聚合时间点数据;
aggregatedTimePointData.Add(val.Time,val.Value);
foreach(lowSampleRateValues中的值对val2){
var值=DetermineRelatestEntryBackwardFrom(val.Time);
aggregatedTimePointData.Add(值);
}
}

通过这种方式,高密度采样信号的采样率可用作时钟,但由于来自其他来源的值仅接近,但不完全在其记录的时间点上,因此会有不准确的情况。如果您希望减少这些不准确度,请选择更高的采样率并执行相同的操作。您可以尽可能接近实际时间点。

感谢您的快速响应。我认为您的伪代码类似于我想要做的,但我仍在尝试在实际代码中实现这一点。如果我弄明白了,或者其他人发布了一个有效的代码片段,我会让你知道的。那么,你对事物的抽象程度如何?我不会去设计一个完整的模型,但是如果你向我展示你到目前为止所拥有的,我可能能够并且愿意帮助实际的实现(或者其他人可能会)。哦,我可能应该在这里更精确一些:为了真正的帮助,如果你把所有的东西都抽象出来,使问题孤立起来,那将非常好,我想说的是,从文件中读取这些值不应该出现在您提供的示例中,也不应该出现与UI相关的内容。保持简单和专注。也许设计一个抽象已经可以让你解决你的问题了。
// if time value from individual file is same as uniqueTime
if currentTime == uniqueTime
{
    valueToWrite = curr_value // write the current value
}
else // currentTime is not same as uniqueTime
{
    valueToWrite = prev_value // write the previous value
}
timeToWrite = uniqueTime // always write the uniqueTime