3 回答

TA貢獻1816條經驗 獲得超4個贊
首先,您似乎希望列表包含字符串數組元素,而不是字符串元素。在這種情況下,它應該是類型List<string[]>。
其次,當您使用時ReadLine(),它只返回一行。如果您希望根據特定行進行拆分,則需要讀取多行。
這是一個使用 LINQ 的簡單解決方案:
var seiten = new List<string[]>();
var allLines = File.ReadAllLines(oFDOpenDatei.FileName);
int consumedLines = 0;
while (consumedLines < allLines.Length)
{
var group = allLines.Skip(consumedLines).TakeWhile(s => s != "(-*-)").ToArray();
if (group.Any()) seiten.Add(group);
consumedLines += group.Length + 1;
}
如果您不需要訪問同一組的個別行,那么您仍然可以使用 aList<string>并將上面的代碼調整為如下所示:
var seiten = new List<string>();
var allLines = File.ReadAllLines(oFDOpenDatei.FileName);
int consumedLines = 0;
while (consumedLines < allLines.Length)
{
var group = allLines.Skip(consumedLines).TakeWhile(s => s != "(-*-)").ToArray();
if (group.Any()) seiten.Add(string.Join(Environment.NewLine, group));
consumedLines += group.Length + 1;
}
rTBA.Text = seiten[0];
rTBB.Text = seiten[1];

TA貢獻1871條經驗 獲得超13個贊
替代方法。所有行都從源文本文件中讀取,然后分配給 a 的每個成員List<TextBoxBase>(您可以包括 RichTextBox 和 TextBox 控件),使用每次找到字符串模式時遞增的選擇器。
如果列表中的控件數少于文本文件中的組數,則循環將僅填充列出的控件然后中斷。
int groupID = -1;
string pattern = "(-*-)";
List<TextBoxBase> controls = new List<TextBoxBase>() { rTBA, rTBB, rTBC };
string[] input = File.ReadAllLines("[File Path]");
for (int i = 0; i < input.Length; i++) {
if (input[i].Contains(pattern)) {
groupID += 1;
continue;
}
if (groupID == controls.Count) break;
controls[groupID].AppendText(input[i] + Environment.NewLine);
}

TA貢獻1794條經驗 獲得超7個贊
使用正則表達式
string[] result = Regex.Split(input, @"(\(-\*-\))", RegexOptions.IgnoreCase, TimeSpan.FromMilliseconds(500));
- 3 回答
- 0 關注
- 144 瀏覽
添加回答
舉報