首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引用编号,并使用它们比较文本文件中的数字。

引用编号,并使用它们比较文本文件中的数字。
EN

Stack Overflow用户
提问于 2019-06-18 02:11:58
回答 1查看 84关注 0票数 0

该项目的基础是眼跟踪器。让我简要介绍一下这个项目背后的想法,以便更好地理解我的问题。

我有托比C眼追踪器的硬件。这个眼睛追踪器可以给出我所看到的X,Y坐标。但是这个装置非常敏感。当我看到一点,眼睛跟踪器会发出许多不同的坐标数据,但在± 100范围内,我发现。即使你盯着1点看,你的眼睛也一直在移动,因此给出了很多数据。然后将这许多数据(浮点数)保存在文本文件中。现在,我只需要一个数据(X坐标),它表示我所注视的一个点,而不是± 100范围内的许多数据,并将其移动到一个新的文本文件中。

我不知道该如何编码才能做到这一点。

这些是文本文件中的float编号。

代码语言:javascript
复制
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,现在,这是新的参考点,并执行同样的操作。这就是我的目标。为了将其转换为更简单的术语,应该将参考点移到一个新文件中。

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

代码语言:javascript
复制
 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范围,它是否有一个新的引用号。然后,这些参考编号存储在一个新的文本文件中。

如果有一个代码示例,我将创建一个新的程序并存储在那里,并首先测试它。

EN

回答 1

Stack Overflow用户

发布于 2019-06-18 05:08:38

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

代码语言:javascript
复制
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的列表。

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

代码语言:javascript
复制
var pointsArray = File.ReadAllLines(your_file_path);
var initialData = new List<float>(pointsArray.Select(float.Parse));

lstReferencePoints 存储到新文本文件的:

代码语言:javascript
复制
using(TextWriter tw = new StreamWriter("newFile_Path"))
{
   foreach (var item in lstReferencePoints)
      tw.WriteLine(item);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56640921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档