Батник для удаления дубликатов строк в больших файлах

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
три ночи мучался писал)))))
Код:
/*
@echo off && cls
set WinDirNet=%WinDir%\Microsoft.NET\Framework
IF EXIST "%WinDirNet%\v2.0.50727\csc.exe" set csc="%WinDirNet%\v2.0.50727\csc.exe"
IF EXIST "%WinDirNet%\v3.5\csc.exe" set csc="%WinDirNet%\v3.5\csc.exe"
IF EXIST "%WinDirNet%\v4.0.30319\csc.exe" set csc="%WinDirNet%\v4.0.30319\csc.exe"
%csc% /nologo /out:"%~0.exe" %0
"%~0.exe" %1
del "%~0.exe"
exit
*/

//14 aug 2015 @ 20:15

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;

namespace spicemustflow_sortcleaner
{
    class Program
    {
        static string GetFilename(string nameWithoutExtension, bool uniq)
        {
            int n = 1;
            string outputFile = string.Empty;
            while (true)
            {
                outputFile = string.Format("{0}_{1}{2}.txt",
                    nameWithoutExtension, uniq ? "uniques" : "duplicates",
                    n > 1 ? n.ToString() : string.Empty);
                if (File.Exists(outputFile)) n++;
                else break;
            }
            return outputFile;
        }

        static void Main(string[] args)
        {
            string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\";
            string[] filelist = null;
            if (args.Length == 0) filelist = Directory.GetFiles(path, "*.txt", SearchOption.TopDirectoryOnly);
            else filelist = args;

            foreach (string filename in filelist)
            {
                Encoding enc = Encoding.Default;
                using (FileStream fs = File.OpenRead(filename))
                {
                    byte[] data = new byte[3];
                    while (fs.Read(data, 0, data.Length) > 0)
                        if (data[0] == 0xef && data[1] == 0xbb && data[2] == 0xbf)
                        {
                            enc = Encoding.UTF8;
                            break;
                        }
                        else
                        {
                            enc = Encoding.GetEncoding(1251);
                            break;
                        }
                }

                Console.Write("loading {0}..\n", filename);
                string[] input = File.ReadAllLines(filename, enc);
                if (input.Length > 0)
                {
                    Console.Write("sorting..\n");
                    Array.Sort(input);
                    List<string> uniques = new List<string>();
                    List<string> duplicates = new List<string>();
                    Console.Write("deleting duplicates..\n");
                    uniques.Add(input[0]);
                    for (int i = 1; i < input.Length; i++)
                        if (input[i] != input[i - 1])
                            uniques.Add(input[i]);
                        else
                            duplicates.Add(input[i]);

                    Console.Write("\nsaving..\n");
                    File.WriteAllLines(path + GetFilename(Path.GetFileNameWithoutExtension(filename), true), uniques.ToArray(), enc);
                    File.WriteAllLines(path + GetFilename(Path.GetFileNameWithoutExtension(filename), false), duplicates.ToArray(), enc);
                    Console.Write("\n\n");
                }
            }
        }
    }
}
кто то тут на форуме искал типо такого что бы повторы записывались отдельно и знать сколько и какие повторы были, просто переносити ваш тхт-файл на файл батника и у вас после создаётся ещё два текстовых файла, один очищенный от дублей, второй сами дубли, оригинал сохраняется как и был, проверенно на 25к строках, всё происходит пока моргнул)))
 
Последнее редактирование:

opiums

Новичок
Регистрация
22.02.2018
Сообщения
2
Благодарностей
0
Баллы
1
Парень, спасибо тебе огромное, я прям преблагодарен за это творение! Мой файл состоит из почти 13 млн строк, этот батник мне единственный помог, приогромнейшее спасибо!
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 169
Баллы
113
Походу @ssXXXss создал себе виртуала, чтобы апнуть тему. таки вспомнил :-))))))

 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113

opiums

Новичок
Регистрация
22.02.2018
Сообщения
2
Благодарностей
0
Баллы
1
вообще то я в поиске нашёл, кому интересно - может погуглить мой никнейм и наткнуться на мои сайты)
 

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
orka13, что то ты в последнее время чересчур подозрителен дружище. С этим надо что то делать и срочно! Не дай бог затянется! :D
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 167
Благодарностей
2 169
Баллы
113
да я же в шутку блин, неужели никто смайликов не видит? Просто действительно настолько маловероятное совпадение, что грех было не упрекнуть :-).
 

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 545
Баллы
113
и вниательно обрати на первую строку, там прекрасно видно что это не я делал
три ночи мучался писал)))))
Так Ваш мопед или нет? :-)

А вообще, пользуясь случаем, хочу обратить всех внимание на правила форума, в частности на пункты 6, 9 и 10.
Давайте как-то посдержанней и с пониманием относиться к друг к другу. Не нужно ругаться.

P.S. Почистил топик от необоснованного негатива.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
Так Ваш мопед или нет? :-)

А вообще, пользуясь случаем, хочу обратить всех внимание на правила форума, в частности на пункты 6, 9 и 10.
Давайте как-то посдержанней и с пониманием относиться к друг к другу. Не нужно ругаться.
и три дня ))))
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)