该项目的基础是眼跟踪器。让我简要介绍一下这个项目背后的想法,以便更好地理解我的问题。
我有托比C眼追踪器的硬件。这个眼睛追踪器可以给出我所看到的X,Y坐标。但是这个装置非常敏感。当我看到一点,眼睛跟踪器会发出许多不同的坐标数据,但在± 100范围内,我发现。即使你盯着1点看,你的眼睛也一直在移动,因此给出了很多数据。然后将这许多数据(浮点数)保存在文本文件中。现在,我只需要一个数据(X坐标),它表示我所注视的一个点,而不是± 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,那么这个数字就是下一个参考点,并执行相同的操作,用下面的数字减去,并检查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中的结果值,如果它超出了± 100范围,它是否有一个新的引用号。然后,这些参考编号存储在一个新的文本文件中。
发布于 2019-06-17 06:38:09
根据您的示例数据,这里是只获取具有100+差异的数字的代码。
静态void ( string[] args) { String = @"C:\PowershellScripts\test.txt";//输入文件字符串outputFile = @"C:\PowershellScripts\result.txt";//输出文件string[] data =File.ReadAllLines(文件名);//读取表单文件int TotalLine = data.Length;//计数行列表FinalList =新列表()的总数NO;//初始化列表,用于最终结果IF (TotalLine <= 0) // CHECK文件没有数据{Console.WriteLine(“无数据找到!");返回;} double CurrentNumber = double.Parse( Data ),NextNumber = 0,diff = 0;//初始化局部变量,当前编号= FIRST FROM FILE FOR (int cntr = 1;cntr < TotalLine;cntr++) // FOR循环为每一行{ NextNumber = double.Parse(datacntr);//解析下一步是NO DIFF = CurrentNumber - NextNumber;// NEXT如果(diff <= 100 & diff >= - 100 ) //匹配差异{<=;//跳过如果diff小于100}>={FinalList.Add(CurrentNumber.ToString())的逻辑;//将NO添加到LIST CurrentNumber = NextNumber;//指向NEXT NO } FinalList.Add(CurrentNumber.ToString());//添加最后一个NO。foreach (FinalList中的字符串d) //用于每个循环打印最终列表Console.WriteLine(d);File.WriteAllLines(outputFile,FinalList);//保存到文件}
上述程序将生成的输出如下:
200 310 500

https://stackoverflow.com/questions/56625136
复制相似问题