参考编号,并使用它们来比较文本文件中的编号

时间:2019-06-18 02:11:58

标签: c#

该项目基于Eye Tracker。让我简要介绍一下项目背后的想法,以便更好地理解我的问题。

我有Tobii C眼动仪的硬件。该眼动仪将能够给出我正在查看的位置的X,Y坐标。但是这个设备非常敏感。当我看着1点时,眼动仪会发送许多不同的坐标数据,但它们在我发现的± 100范围内。即使您凝视1点,您的眼睛仍会移动,因此会发出许多数据。然后将这么多数据(浮点数)保存在文本文件中。现在,我只需要1个数据(X坐标)即可表示我正在凝视的1点,而不是± 100范围内的许多数据并将其移至新的文本文件。

我不知道该如何编码。

这些是文本文件中的float数字。

200
201
198
202
250
278
310
315
360
389
500
568
579
590

当我凝视点1时,数据为200-300,在± 100范围内。我想将200设置为参考点,然后将其与下一个数字相减,然后检查100内的结果值是否正确,将其删除。参考点应继续对以下数字进行操作,直到达到± 100范围之外。一旦超出100范围,则数字为310,然后此数字为下一个参考点,并执行相同操作,并在下面减去以下数字,并检查结果值是否在{{1 }}。一旦超出100范围,下一个数字就是100,现在,这是新的参考点,并执行相同的操作。那是我的目标。简单来说,参考点应移到新文件中。

到目前为止,这是我的代码,该代码获取凝视坐标并将其存储在文本文件中。

500
  

现在我的问题是如何编写代码以读取文本文件并设置   参考编号,并减去下一个编号并检查   如果结果值在 using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using Tobii.Interaction; namespace ConsoleApp1 { class Program { private static void programintro() { Console.WriteLine("Press Any Keys To Start"); } public static void Main(string[] args) { programintro(); Console.ReadKey(); double currentX = 0.0; double currentY = 0.0; double timeStampCurrent = 0.0; double diffX = 0.0; double diffY = 0.0; int counter = 0; var host = new Host(); host.EnableConnection(); var gazePointDataStream = host.Streams.CreateGazePointDataStream(); gazePointDataStream.GazePoint((gazePointX, gazePointY, timestamp) => { diffX = gazePointX - currentX; diffY = gazePointY - currentY; currentX = gazePointX; currentY = gazePointY; timeStampCurrent = timestamp; if (diffX > 100 || diffX <= -100 || diffY >= 100 || diffY <= -100) { counter++; using (StreamWriter writer = new StreamWriter("C: \\Users\\Student\\Desktop\\FYP 2019\\ConsoleApp1\\ConsoleApp1\\Data\\TextFile1.txt", true)) { writer.WriteLine("Recorded Data " + counter + "\n=================================================================================================================\nX: {0} Y:{1}\nData collected at {2}", currentX, currentY, timeStampCurrent); writer.WriteLine("================================================================================================================="); } Console.WriteLine("Recorded Data " + counter + "\n=================================================================================================================\nX: {0} Y:{1}\nData collected at {2}", currentX, currentY, timeStampCurrent); Console.WriteLine("================================================================================================================="); } }); //host.DisableConnection(); while (true) { if (counter < 10) { continue; } else { Environment.Exit(0); } } 之内,并且具有新的参考号,如果   超出100范围。这些参考号然后存储在   一个新的文本文件。

如果有代码示例,我将创建一个新程序并将其存储在其中并首先对其进行测试。

1 个答案:

答案 0 :(得分:0)

假设列表中包含初始数据,则获取所有参考点的逻辑如下:

var initialData = new List<float> {  200,201,198,202,250,278,310,315,360,389,500,568,579,590  };

var lstReferencePoints = new List<float>();
var referencePoint = default(float);
foreach(var num in initialData)
{
    if(referencePoint == default(float))
    {
        referencePoint = num;
    }
    if(Math.Abs(referencePoint - num) > 100)
    {
        lstReferencePoints.Add(referencePoint);
        referencePoint = num;
    }
}

lstReferencePoints.Add(referencePoint);

lstReferencePoints包含referencePoints列表。

编辑:将浮点数从文本文件读取到列表

var pointsArray = File.ReadAllLines(your_file_path);
var initialData = new List<float>(pointsArray.Select(float.Parse));

lstReferencePoints存储到新的文本文件中:

using(TextWriter tw = new StreamWriter("newFile_Path"))
{
   foreach (var item in lstReferencePoints)
      tw.WriteLine(item);
}