Aplikacja do usuwania duplikatów

Aplikacja do usuwania duplikatów
BE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 39
0

Witam!
Jestem na etapie tworzenia prostej aplikacji do usuwania zduplikowanych wierszy z textbox. Ma działać ona tak:

  1. Pobiera wszystkie linie z pliku "STAND.txt" do "textBox1.Text"
  2. do "textBox1.Text" dodaje "textBox2.Text"
  3. Usuwa zduplikowane i puste linie z "textBox1.Text"
  4. 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

Kopiuj
             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:

Kopiuj
                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:

  1. 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ę.

  2. 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?

R3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 419
0

Deduplikację linii pliku można zrobić krócej

Kopiuj
List<String> lines = new List<String>(File.ReadAllLines(@"C:\users\Damian\Desktop\STAND.txt"));
File.WriteAllLines(@"C:\users\Damian\Desktop\STAND_out.txt", lines.Distinct());

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.