亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何讓一個文本文件在不同的 RichTextBoxes 中被一個字符串分割?

如何讓一個文本文件在不同的 RichTextBoxes 中被一個字符串分割?

C#
呼如林 2022-11-22 16:15:34
我的文本文件如下所示:(-*-)textA1textA2textA3(-*-)textB1textB2textB3(-*-)textC1...現在我嘗試將文本文件按(-*-)字符串拆分(<-在文本文件中始終如此!)并將其顯示在不同的富文本框中。我實際上使用以下代碼...嘗試使用數據表、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”語句在兩個 richtboxes 中顯示一個“S”......無論出于何種原因:))-foreach 說超出索引,但是當我檢查 array.lenght 時,它顯示 A 處為 1,B 處為 2 ... 不多有人可以讓我走上正軌嗎???
查看完整描述

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];


查看完整回答
反對 回復 2022-11-22
?
慕桂英4014372

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);

}


查看完整回答
反對 回復 2022-11-22
?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

使用正則表達式

    string[] result = Regex.Split(input, @"(\(-\*-\))",
                               RegexOptions.IgnoreCase,
                               TimeSpan.FromMilliseconds(500));


查看完整回答
反對 回復 2022-11-22
  • 3 回答
  • 0 關注
  • 144 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號