【问题标题】:Specialized data processing in C# to find instances of words in a string in textfileC# 中的专门数据处理以在文本文件中的字符串中查找单词的实例
【发布时间】:2021-08-21 01:31:11
【问题描述】:

我的示例目录/var/log/application/ 中有一个名为dat 的示例纯文本文件。结构是这样的:

Cat
Dog
Bird
Fish

这是我要分析的数据。我在同一目录中有一个名为var 的第二个文件,其中包含一行I have a dog and a cat!。使用 C#,我想找到在 dat 中的单词在 var 中出现的次数。这应该返回值 2。为此,我用 C# 编写了一个大部分非功能性脚本来解释我的推理。

using System;
using System.IO;
using Systems.Collections.Generic;

namespace Example
{
     class Logic
     {
          static int instances;
          static int entries = GetDat();

          static string datpath = @"/var/log/application/dat";
          static string varpath = @"/var/log/application/var";

          static void Main(string[] args)
          {
               for(i = 0; i <= GetDat; i++)
               {
                    // I made this up because I don't know how to explain it otherwise
                    if(word.in GetVar instance.in GetDat)
                    {
                         instances++
                    }
                    return 2;
               }
          }

          static byte[] GetDat()
          {
               // Get entries from `dat` and turn it into array
          }

          static byte[] GetVar()
          {
               System.Collections.Generic.IEnumerable<String> lines = File.ReadLines(varpath);
          }
     }
}

我该怎么做?有没有更优化的方法来做到这一点?这不区分大小写,类似doggen 的内容不会返回dog 的结果。我不需要使用 StreamReader 或 StreamWriter 流式传输任何内容,并且只处理 ACSII 文本(“abcdefg”,而不是“82&:!:'ehebeodu”)。任何解决(或帮助我解决)这个问题的答案将不胜感激。谢谢!

编辑:新代码!

        public static void FindNumberOfSimilarStrings()
        {
            string[] var = StringOne();
            foreach(string line in StringTwo())
            {
                foreach(string entry in var)
                {
                    if (input.IndexOf(line, StringComparison.OrdinalIgnoreCase) >= 0)
                    {
                        Console.WriteLine(line);
                        instances++;
                    }
                }
            }
            Console.WriteLine(instances);
        }

【问题讨论】:

  • 这个需要快吗,内存有问题,dog是不是匹配dogger,这个是否区分大小写,字边界规则是什么,这个需要处理大吗文件,您需要流式传输吗,Unicode 规则是什么,等等等等等等。总之这个问题有点乏味,缺乏足够的约束,需要大量澄清
  • @TheGeneral 我已经编辑了我的问题以符合适当的资格。不够具体是我的坏事。下次我不会留下细节来假设。感谢您的意见!

标签: c# parsing io


【解决方案1】:
using System;
using System.IO;

namespace Example
{
    class Program
    {
        static int instances;
        static string datpath = @"/var/log/application/dat";
        static string varpath = @"/var/log/application/var";

        static void Main(string[] args)
        {

            string[] vs = GetVar();
            foreach (string line in GetDat())
            {
                foreach (string v in vs)
                {
                    if (v.IndexOf(line, StringComparison.OrdinalIgnoreCase) >= 0)
                    {
                        Console.WriteLine(line);
                        instances++;
                    }
                }
            }
            Console.WriteLine($"instances = {instances}");
        }

        static string[] GetDat()
        {
            return File.ReadAllLines(datpath);
        }

        static string[] GetVar()
        {
            return File.ReadAllLines(varpath);
        }
    }
}

【讨论】:

  • 这不起作用,因为这似乎将“Var”与“Dat”中有多少条目进行比较。你能详细说明一下吗?
猜你喜欢
  • 1970-01-01
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
相关资源
最近更新 更多