设置参考号并将其与文本文件中的其他数据进行比较

Posted

技术标签:

【中文标题】设置参考号并将其与文本文件中的其他数据进行比较【英文标题】:Setting a reference number and comparing that to other data in textfile 【发布时间】:2019-10-30 16:23:21 【问题描述】:

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

我有 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,那么现在这个数字是下一个参考点,做同样的事情并减去下面的数字,并检查结果值是否在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 内的结果值并且有一个新的参考号 if 它在± 100 范围之外。然后将这些参考编号存储在 一个新的文本文件。

【问题讨论】:

拉起来,拉起来!在开始处理这些数据之前,您需要了解其背后的生理过程。绘制 x 和 y 分量的时间序列。它看起来像一个适当的扫视和注视序列吗?是否有短暂的眨眼伪影,或平滑追踪的时期?头部是固定的,还是 VOR 正在运行?处理前可视化。如果您不处理人工制品,或者不了解快速瞬变(扫视/前庭/眨眼),那么您过早处理的数据将毫无意义。也许从这里开始:link.springer.com/article/10.3758/s13428-016-0738-9 该死的,我停下来了。但是你的话对我来说是陌生的 这就是问题所在。在开始进行任何信号处理(可能像任何其他生物信号一样)之前,分析眼动追踪数据需要一些特定领域的知识。 好吧,但是到目前为止我所做的是正确的,对吧? 【参考方案1】:

根据您的示例数据,这里是仅获取具有 100+ 差异的数字的代码。

static void Main(string[] args)

  string filename = @"C:\PowershellScripts\test.txt"; // INPUT FILE
  String outputFile = @"C:\PowershellScripts\result.txt"; // OUTPUT FILE

  string[] data = File.ReadAllLines(filename); // READING FORM FILE
  int TotalLine = data.Length; // COUNT TOTAL NO OF ROWS
  List<string> FinalList = new List<string>(); // INITIALIZE LIST FOR FINAL RESULT

  if (TotalLine <= 0) // CHECK IF FILE HAS NO DATA
  
      Console.WriteLine("No Data found !");
      return;
  

  double CurrentNumber = double.Parse(data[0]), NextNumber = 0, diff = 0; // INITIALIZE OF LOCAL VARIABLES, CURRENT NUMBER = FIRST NO FROM FILE

  for (int cntr = 1; cntr < TotalLine; cntr++) // FOR LOOP FOR EACH LINE
  
      NextNumber = double.Parse(data[cntr]); //PARSING NEXT NO
      diff = CurrentNumber - NextNumber; // GETTING DIFFERENCE

      if (diff <= 100 && diff >= -100) // MATCH THE DIFFERENCE
      
          continue; // SKIP THE LOGIC IF DIFF IS LESS THEN 100
      
      else
      
          FinalList.Add(CurrentNumber.ToString()); // ADDING THE NO TO LIST
          CurrentNumber = NextNumber; // POINTING TO NEXT NO
      

  

  FinalList.Add(CurrentNumber.ToString()); // ADDING LAST NO.
  foreach (string d in FinalList) // FOR EACH LOOP TO PRINT THE FINAL LIST
      Console.WriteLine(d);

  File.WriteAllLines(outputFile, FinalList); // SAVING TO THE FILE


上面的程序会生成输出是:

200
310
500

【讨论】:

您好,感谢您的帮助,但是编译时没有显示任何输出 我确实根据我的更改了我的文件路径。但是 wdym 通过用我的主要功能替换整个示例代码。我没有将您的代码与我的代码一起添加。我想单独测试一下。所以我创建了一个新程序并添加了 yr 代码。 您是在 Visual Studio 控制台应用程序中开发吗? 是的。我在 Visual Studio 控制台应用程序中做 你在按 ctrl+F5 吗?

以上是关于设置参考号并将其与文本文件中的其他数据进行比较的主要内容,如果未能解决你的问题,请参考以下文章

如何比较变量并将变量设置为在c#中的一个变量中找到的新文本

替换代码模块中的文本

从 JSON 文件中提取字段,将其与纯文本文件匹配值进行比较,并从 JSON 文件中提取特定字段

将字符串与文件中的字符串进行比较[重复]

如何获取当前位置并将其与其他 lolation 或几乎关于 android studio 中的第二个位置进行比较

AJAX AutoComplete Extender - 设置 ContextKey 参数值并将其与前缀文本一起传递给 WebMethod