C#/.NET 字符串魔术,用于从文本文件输入中删除注释行
本文关键字:输入 文件 删除 注释 文本 NET 字符串 魔术 用于 | 更新日期: 2023-09-27 18:31:23
假设你有一个文本文件,你读入了一个长字符串:
123 123 123
123 123 123
// Just a comment
123 123 123
123 123 123
# Just a comment
123 123 123
您通常将其拆分为如下所示的行(Unity3D 中的示例),
List<string> lines = new List<string>(
controlFile.text.Split(new string[] { "'r","'n" },
StringSplitOptions.RemoveEmptyEntries));
.NET 提供了大量的字符串魔术,例如格式设置等。
我想知道,是否有一些可用的魔法可以轻松删除评论?
注意 - 当然可以使用正则表达式等来做到这一点。正如SonerGönül指出的那样,它可以通过.Where
和.StartsWith
我的问题是,在.NET字符串魔术的宇宙中是否有一些工具,它专门"理解"并帮助注释。
即使专家的答案是"绝对否定",这也是一个有用的答案。
你可以
这样尝试:
var t= Path.GetTempFileName();
var l= File.ReadLines(fileName).Where(l => !l.StartsWith("//") || !l.StartsWith("#"));
File.WriteAllLines(t, l);
File.Delete(fileName);
File.Move(t, fileName);
因此,您基本上可以将原始文件的内容复制到没有注释行的临时文件中。然后删除该文件并将临时文件移动到原始文件。
希望这是有意义的:
string[] comments = { "//", "'", "#" };
var CommentFreeText = File.ReadLines("fileName Here")
.Where(X => !comments.Any(Y => X.StartsWith(Y)));
您可以使用要从文本文件中删除的注释符号填充comments[]
。在阅读文本时,它将消除以任何注释符号开头的所有行。
您可以使用以下方法将其写回:
File.WriteAllLines("path", CommentFreeText);
仅供参考,Rahul基于SonerGönül的答案是错误的,代码有一个错误并且不起作用。
为了节省任何人打字,这里有一个功能/测试的答案,它只使用匹配。
关于手头的问题,似乎没有任何专门内置于.Net的东西可以"理解"文本中的典型注释。你只需要像这样使用匹配从头开始编写它......
// ExtensionsSystem.cs, your handy system-like extensions
using UnityEngine;
using System.Collections.Generic;
using System;
using System.Text.RegularExpressions;
using System.Linq;
public static class ExtensionsSystem
{
public static List<string> CleanLines(this string stringFromFile)
{
List<string> result = new List<string>(
stringFromFile
.Split(new string[] { "'r","'n" },
StringSplitOptions.RemoveEmptyEntries)
);
result = result
.Where(line => !(line.StartsWith("//")
|| line.StartsWith("#")))
.ToList();
return result;
}
}
然后你会
List<string> lines = controlFile.text.CleanLines();
foreach (string ln in lines) Debug.Log(ln);