我正在尝试读取一个 txt 文件并读取第一列以获取第二列

I am trying to read a txt file and read column one to get column two

我有一个 txt 文件,它有两个不同的值,都是数字,其中第一列是 00 到 0000000(长度为 2 到 12),第二列的长度是 0120 到 0111111111( 4 到 12 长)。我的问题很多:

  1. 如何查找特定值(如布尔搜索)

  2. 如何return对应的值到它自己的字符串

我试过 StreamReader 没有成功(甚至无法使它起作用),我发现了 .Split.Parse 之类的东西,并尝试了很多例子在这里和网上实际上并没有做我需要的事情。

/* Example of useless code I found */
class ReadFromFile
{
    static void Main()
    {
        char[] delimiterChars = { ' ', ',', '.', ':', '\t' };

        string text = "one\ttwo three:four,five six seven";
        System.Console.WriteLine($"Original text: '{text}'");

        string[] words = text.Split(delimiterChars);
        System.Console.WriteLine($"{words.Length} words in text:");

        foreach (var word in words)
        {
            System.Console.WriteLine($"{word}");
        }
    }
}

好吧,该代码非常无用,它根本没有完成任务,因为它只是使用 .Split 函数来创建新行,而无助于查找特定值之后的内容。

具体来说,我想搜索 x 值并将 y 值保存为 z 值字符串(这部分使用数学术语,字符串除外)。

像这样?:

 char[] delimiterChars = { ' ', ',', '.', ':', '\t' };
        string text = "one\ttwo three:four,five six seven";

        string[] words =  text.Split(delimiterChars);
        List<string> values = new List<string>();
        for (int i = 0; i < words.Length; i+=2)
        {
            if(words.Length > i)
            if (words[i].Length >= 2 && words[i].Length <= 12) {
                if (words[i+1].Length >= 4 && words[i+1].Length <= 12)
                {
                    values.Add(words[i+1]);
                }
            }
        }

我真的不确定我是否完全理解你的问题:P

(如果我有问题请评论,我会再次删除答案)

虽然你没有指定,但我认为你的文件会有多行,每行都符合你的描述,如下所示:

00 0120
0000 0111111111 
(etc.)

因此您需要读取每一行,使用 .Split 解析它并查找您想要的值。如果您只需要执行一次,最好是在阅读后立即检查每一行,使用 example:

中的 StreamReader
using System;
using System.IO;

class Test
{
    public static void Main()
    {
        char[] delimiterChars = { ' ', ',', '.', ':', '\t' };
        using (StreamReader sr = new StreamReader(@"d:\temp\TestFile.txt"))
        {
            string line = sr.ReadLine();
            string[] words = line.Split(delimiterChars);
            if (words[0] == "00")
            {
                Console.WriteLine($"Found it, yay!  words[0]={words[0]}, words[1]={words[1]}");
            }
        }
    }
}

如果您想多次搜索,您可以将拆分的单词放在某个数据结构中而不是搜索 - 可能是 Dictionary - 并在以后搜索任意多次。

解决方案:

请在 https://dotnetfiddle.net/txr4Qz 查看我的代码,看看是否对您有帮助。

对于您的问题 1:如何查找特定值(如布尔搜索)

You have to check if the word is of a specific type. for eg:

// Checks if word is of number (change it as per your requirement)
if (int.TryParse (words[i], out int _) && int.TryParse (words[i+1], out int _)) { ...Statements... }

对于你的问题2:如何return对应的值到它自己的字符串

You are already getting a string form of data from the file. So store it and process it as required.