Witam!
Jestem na etapie tworzenia prostej aplikacji do usuwania zduplikowanych wierszy z textbox. Ma działać ona tak:
- Pobiera wszystkie linie z pliku "STAND.txt" do "textBox1.Text"
- do "textBox1.Text" dodaje "textBox2.Text"
- Usuwa zduplikowane i puste linie z "textBox1.Text"
- Zapisuje "textBox1.Text" do pliku "STAND.txt"
Czyli: textBox1.Text sluży do odczytu z i zapisu do STAND.txt
Pobieranie z pliku do textBox1.Text
string line;
System.IO.StreamReader file = new System.IO.StreamReader(@"C:\users\Damian\Desktop\STAND.txt");
while ((line = file.ReadLine()) != null)
{
textBox1.Text += line + "\r\n";
}
file.Close();
AllCount = textBox1.Lines.Count();
label2.Text = AllCount.ToString();
textBox2.Select();
Kod usuwający duplikaty i zapisujący do pliku:
TextWriter save = new StreamWriter(@"C:\users\Damian\Desktop\STAND.txt");
textBox1.Text += "\r\n";
textBox1.Text += textBox2.Text;
textBox1.Text = Regex.Replace(textBox1.Text, @"^\s*$(\n|\r|\r\n)", "", RegexOptions.Multiline);
textBox1.Text = string.Join(Environment.NewLine, textBox1.Lines.Distinct());
save.WriteLine(textBox1.Text);
save.Close();
textBox2.Text = "";
AllCount = textBox1.Lines.Count() + AddCount;
label2.Text = AllCount.ToString();
textBox2.Select();
Na samym początku do textBox1.Text dodaję nową linię, ponieważ w innym przypadku pierwsza linia z textBox2.Text jest dodawana do ostatniej lini textBox1.Text a nie do pustej lini.
Problemy:
-
plik STAND często zawiera 2 nowe linie na końcu. Jak uda mi się ich jakoś pozbyć, to i tak nigdy nie pozbywam się jednej pustej lini na końcu. Tak jakby StreamWriter dodawał 1 pustą linię.
-
Usuwanie duplikatów dziwnie działa. Gdy wkleję tam 1200 różnych liczb to nie usunie nic. Ok, a jak wkleję 1200 adresów url, z czego około 800 jest zduplikowanych, to zamiast usunąć mi 800 to usuwa prawie 1000. Sprawdziłem tymi stronami:
http://textmechanic.com/text-tools/basic-text-tools/remove-duplicate-lines/
http://www.textfixer.com/tools/remove-duplicate-lines.php
http://www.dedupelist.com/#startresults
Wszystkie usuwają mi 800, a mój program około 1000.
Na innym przykładzie (tutaj linki) zamiast usunąć 13 linków, usuwa 200.
Macie jakieś propozycje?