using System; using System.Collections.Generic; namespace DrillTools { /// /// 钻带文本行结构,保留原始文本和行尾换行符。 /// internal readonly record struct DrillTapeLine(string Text, string LineEnding); /// /// 钻带行解析器,将钻带文本按行拆分,保留原始换行符。 /// internal static class DrillTapeLineParser { private static readonly char[] LineEndChars = { '\r', '\n' }; /// /// 将文本内容按行拆分,保留每行的换行符。 /// public static List SplitLines(string content) { var lines = new List(); int index = 0; while (index < content.Length) { int lineEndIndex = content.IndexOfAny(LineEndChars, index); if (lineEndIndex < 0) { lines.Add(new DrillTapeLine(content[index..], string.Empty)); return lines; } string text = content[index..lineEndIndex]; string lineEnding; if (content[lineEndIndex] == '\r' && lineEndIndex + 1 < content.Length && content[lineEndIndex + 1] == '\n') { lineEnding = "\r\n"; index = lineEndIndex + 2; } else { lineEnding = content[lineEndIndex].ToString(); index = lineEndIndex + 1; } lines.Add(new DrillTapeLine(text, lineEnding)); } if (content.Length == 0) lines.Add(new DrillTapeLine(string.Empty, string.Empty)); return lines; } } }