0

TextBox があり、前の行 = 行の後の場合に行を削除したい。

私はそのようなテキストを持っています:

Ab cd ...

Ef Gss ...
EE oo ...
EE oo ... // delete this line
qq ss ff

ok ee ..

多くのコードを試してみましたが、同じ行がすべて削除されました。次の同じ行を削除したいだけです。空行は常に存在する必要があります。

私が使用したコード:

richTextBox1.Text = string.Join( Environment.NewLine, richTextBox1.Lines.Distinct()); 

または:

for (int tx = 0; tx < richTextBox1.Text.Length; tx++)
        {
            for (int tx1 = tx + 1; tx1 < richTextBox1.Text.Length; tx1++)
            {
                if (richTextBox1.Lines[tx] == richTextBox1.Lines[tx1])
                   // something like  richTextBox1.Lines[tx1].RemoveAt(tx1);
            }
        }
4

4 に答える 4

2

これを試して -

      string[] temp = richTextBox1.Lines;
      for (int i= 0; i< richTextBox1.Lines.Length - 1; i++)
      {
          if (richTextBox1.Lines[i] == richTextBox1.Lines[i+ 1]
               && rt.Lines[i] != String.Empty)
          {
              temp[i] = null;
          }
      }
      richTextBox1.Lines = temp.Where(a => a != null).ToArray();
于 2012-11-15T12:13:16.447 に答える
0

投稿したコードは次の行を削除するのに問題ないように見えますが、最初のループの行に等しい残りのテキストのすべての行を削除しています。だからあなたのコードで

xyz//line0
abc//line1
abc//line2
//line3
hjk//line4
abc//line5

行: 2,5 が削除されます。私が正しく理解している場合は、2 行目のみを削除してください。

私の例

line1 text //line index 0
abc //line index 1
abc//delete this line, index 2
abc//delete this line, index 3

ステップ1。行番号 2 が削除されました

line1 text //line index 0
abc //line index 1
//deleted abc line, previous index 2, 
abc//delete this line, index 2, previous index 3

ただし、行インデックス 2 を削除した後の tx はインクリメントされるため、ベース テキスト行 3 になるため、tx-- を追加する必要があります。

for (int tx = 0; tx < richTextBox1.Text.Length - 1; tx++)
    {
            if (richTextBox1.Lines[tx] == richTextBox1.Lines[tx+1])
            {
               // something like  richTextBox1.Lines[tx+1].RemoveAt(tx);
               tx--;
            }
        }
    }

空行を削除したくない場合は、上記の if ステートメントを変更する必要があります

if(!String.IsNullOrEmpty(richTextBox1.Lines[tx]) &&richTextBox1.Lines[tx] == richTextBox1.Lines[tx+1])
于 2012-11-15T12:17:38.137 に答える
0

これを試して:

textBox1.Text = string.Join(Environment.NewLine, textBox1.Lines.Distinct());
于 2012-11-15T12:11:48.377 に答える
0

yield 演算子がこの問題に対処していると思います:

public static IEnumerable<String> GetDistinctLines(IEnumerable<String> lines)
{
    string currentLine = null;
    foreach (var line in lines)
    {
        if (line != currentLine)
        {
            currentLine = line;
            yield return currentLine;
        }
    }
}

それから

richTextBox1.Lines = GetDistinctLines(richTextBox1.Lines).ToArray();
于 2012-11-15T12:55:14.507 に答える