为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
红糖糍粑 2023-09-24 17:04:53
我有一个 txt 文件,它有两个不同的值,所有数字,其中第一列的长度为 00 到 0000000 (长度为 2 到 12),第二列的长度为 0120 到 0111111111 (长度为 4 到 12) )。我的问题有很多:如何查找特定值(如布尔搜索)如何将对应的值返回到自己的字符串中我尝试过但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 值字符串(使用除单词字符串之外的这部分的数学术语)。
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

尽管您没有指定它,但我认为您的文件将有多行,每行都与您的描述匹配,如下所示:


00 0120

0000 0111111111 

(etc.)

因此,您需要读取每一行,使用它来解析它.Split并查找您想要的值。如果您只需要执行一次,最好是在阅读后立即检查每一行,使用 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]}");

            }

        }

    }

}

如果您想多次搜索,您可以将拆分的单词放入某些数据结构(可能是 a)中,Dictionary而不是搜索,然后根据需要多次搜索。


查看完整回答
反对 回复 2023-09-24
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

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

您必须检查该单词是否属于特定类型。例如:

// 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:如何将相应的值返回到它自己的字符串

您已经从文件中获取了字符串形式的数据。因此,请根据需要进行存储和处理。


查看完整回答
反对 回复 2023-09-24
?
森林海

TA贡献2011条经验 获得超2个赞

像这样?:


 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


(如果我觉得不对,请发表评论,我会再次删除答案)


查看完整回答
反对 回复 2023-09-24
  • 3 回答
  • 0 关注
  • 160 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信