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

求助:Unity中Split读TXT、TMPro_InputField读取后无法获取数组全量元素

Unity中TMPro_InputField数据读取与文本比对问题排查与修复

一、文本读取代码的问题及修复

原读取代码存在几个关键问题,直接导致后续比对失效:

  • 换行符兼容问题:不同系统换行符可能是\r\n(Windows)或\n(Linux/macOS),仅用Split("\n")分割会让部分字符串末尾残留\r,比对时因字符不匹配失败。
  • List初始化逻辑错误:仅当dataLines.Count>0时才新建List,若dataLines初始为null会触发空引用异常。
  • 空行与空白字符处理缺失:Split("\n")后的元素不会是"\n",原判断无效;且未对行内容做Trim处理,残留的空格、换行符会干扰比对。

修复后的ReadFile方法:

public void ReadFile()
{
    // 初始化或清空List,避免空引用
    if (dataLines == null)
        dataLines = new List<string>();
    else
        dataLines.Clear();

    // 按所有换行符分割,兼容不同操作系统
    rawDataLines = FileManager.fileManagerInstance.mainFile.text.Split(new[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
    foreach(string line in rawDataLines)
    {
        // 去除首尾空白字符后再判断条件
        var trimmedLine = line.Trim();
        if (trimmedLine.Contains(",") && !trimmedLine.Contains("#") && !dataLines.Contains(trimmedLine))
        {
            dataLines.Add(trimmedLine);
        }
    }
}

二、InputField比对代码的优化

原比对逻辑的问题:

  • 未处理InputField文本的换行符兼容,分割后的元素与文本文件行内容不匹配。
  • 直接将匹配元素设为空字符串,而非移除,会留下无效空元素影响后续处理。

修复后的比对逻辑:

// 处理InputField文本,兼容换行符并分割
var inputLines = inputData.text.Split(new[] { "\r\n", "\n", "\r" }, StringSplitOptions.RemoveEmptyEntries)
                          .Select(line => line.Trim())
                          .ToList();

// 移除与文本文件中匹配的元素
inputLines.RemoveAll(line => CheckFile.checkFileInstance.dataLines.Contains(line));

// 转成数组(如果需要数组形式)
arrayConvertedData = inputLines.ToArray();

三、额外排查建议

  • 确认FileManager.fileManagerInstance.mainFile是正确加载的TextAsset,或文件路径无误,避免读取空内容。
  • 调试时用Debug.Log($"Line内容: '{line}'")打印元素,直观查看是否有\r等隐藏字符导致匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:40:39