我的文本文件如下:
(-*-)
textA1
textA2
textA3
(-*-)
textB1
textB2
textB3
(-*-)
textC1
...
现在,我尝试用(-*-)
字符串分割文本文件(<-在文本文件中总是这样!),并在不同的richtextboxes中显示它。
我实际上使用以下代码...
尝试过数据表,stringbuilder,iList ...
我的目标是在richtextbox A中获取所有textA,在richtextbox B中获取textB,等等...
private void öffnenToolStripMenuItem_Click(object sender, EventArgs e)
{
var seiten = new List<string>();
if (oFDOpenDatei.ShowDialog() == DialogResult.OK)
{
using (StreamReader sr = new StreamReader(oFDOpenDatei.FileName))
{
while (!sr.EndOfStream)
{
string[] read = sr.ReadLine().Split(new string[] { "(-*-)" }, StringSplitOptions.None);
for (int i = 0; i < read.Length; i++)
{
seiten.Add(Convert.ToString(read));
}
//foreach (var item in read)
//{
// seiten.Add(Convert.ToString(item));
//}
}
sr.Close();
}
rTBA.Text = seiten[0][0].ToString();
rTBB.Text = seiten[1][0].ToString();
}
}
-激活“ for”语句在两个richtbox中都显示一个“ S” ...无论出于何种原因:))
-foreach说超出索引,但是当我检查array.lenght时,它显示我在A处为1,在B处为2 ...更多
有人可以让我走上正确的路吗??
答案 0 :(得分:1)
首先,您似乎希望列表包含字符串数组元素,而不是字符串元素。在这种情况下,它的类型应该为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;
}
如果您不需要访问同一组的各个行,则仍然可以使用List<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];
答案 1 :(得分:0)
使用正则表达式
string[] result = Regex.Split(input, @"(\(-\*-\))",
RegexOptions.IgnoreCase,
TimeSpan.FromMilliseconds(500));
答案 2 :(得分:0)
替代方法。从源文本文件中读取所有行,然后将其分配给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);
}