You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解析含交替名称与整数列表的文本文件并存入不同数组?

解决读取文本文件并将数据存入对应数组的问题

你已经找对了方向——用正则分割来区分不同组的数据,但分隔符的写法和后续的数组赋值逻辑还需要调整。结合你的文本格式w1; 1 2 3 w2; 3 4 5 w3; 4 5 6,我给你梳理两种可行的实现方案:

方案1:处理单行文本内容(文件只有一行数据)

如果你的文本文件是整行内容,用File.ReadAllText读取后,通过正则分割提取各组数据,再转换为int数组:

using System;
using System.IO;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {
        // 初始化三个目标数组
        int[] w1 = new int[3];
        int[] w2 = new int[3];
        int[] w3 = new int[3];

        // 读取整个文件的内容
        string fileContent = File.ReadAllText(@"D:\\Data.txt");

        // 用正则分割,匹配"w数字; "这样的分隔符,把各组数据拆分出来
        string[] dataSegments = Regex.Split(fileContent, @"w\d+; ");

        // 分割后第一个元素是空字符串(因为文本开头就是w1;),所以从索引1开始对应各组数据
        if (dataSegments.Length >= 4)
        {
            // 处理w1的数据:按空格分割字符串,再转成int赋值到数组
            AssignDataToIntArray(dataSegments[1], w1);
            // 处理w2的数据
            AssignDataToIntArray(dataSegments[2], w2);
            // 处理w3的数据
            AssignDataToIntArray(dataSegments[3], w3);
        }

        // 测试输出验证结果
        Console.WriteLine("w1: " + string.Join(", ", w1));
        Console.WriteLine("w2: " + string.Join(", ", w2));
        Console.WriteLine("w3: " + string.Join(", ", w3));
    }

    // 封装一个通用方法,把字符串数据转成int数组,避免重复代码
    private static void AssignDataToIntArray(string dataStr, int[] targetArray)
    {
        string[] numberStrs = dataStr.Trim().Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
        for (int i = 0; i < numberStrs.Length && i < targetArray.Length; i++)
        {
            // 用TryParse避免非数字内容导致程序崩溃
            int.TryParse(numberStrs[i], out targetArray[i]);
        }
    }
}

方案2:处理多行文本内容(每个wX; 单独占一行)

如果你的文件是每行一个数据组(比如w1; 1 2 3单独一行),用File.ReadAllLines遍历每行,通过分号分割键和数据,再根据键赋值对应数组,这种写法更灵活:

using System;
using System.IO;

class Program
{
    static void Main()
    {
        int[] w1 = new int[3];
        int[] w2 = new int[3];
        int[] w3 = new int[3];

        foreach (string line in File.ReadAllLines(@"D:\\Data.txt"))
        {
            // 按分号分割键和数据部分
            string[] lineParts = line.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries);
            if (lineParts.Length != 2) continue; // 跳过格式不正确的行

            string key = lineParts[0].Trim();
            string dataStr = lineParts[1].Trim();

            // 根据键匹配对应的数组赋值
            switch (key)
            {
                case "w1":
                    AssignDataToIntArray(dataStr, w1);
                    break;
                case "w2":
                    AssignDataToIntArray(dataStr, w2);
                    break;
                case "w3":
                    AssignDataToIntArray(dataStr, w3);
                    break;
            }
        }

        // 验证输出
        Console.WriteLine("w1: " + string.Join(", ", w1));
        Console.WriteLine("w2: " + string.Join(", ", w2));
        Console.WriteLine("w3: " + string.Join(", ", w3));
    }

    private static void AssignDataToIntArray(string dataStr, int[] targetArray)
    {
        string[] numberStrs = dataStr.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
        for (int i = 0; i < numberStrs.Length && i < targetArray.Length; i++)
        {
            int.TryParse(numberStrs[i], out targetArray[i]);
        }
    }
}

关键说明

  • 用StringSplitOptions.RemoveEmptyEntries可以自动过滤分割后出现的空字符串,避免处理无效数据;
  • 用int.TryParse替代int.Parse,哪怕文本里有非数字内容,程序也不会直接崩溃,只会跳过无效值;
  • 封装AssignDataToIntArray方法是为了避免重复写相同的赋值逻辑,让代码更简洁易维护。

内容的提问来源于stack exchange,提问作者Danki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:30:20