SUPPORT_388945a0
Участник
SUPPORT_388945a0
Участник
- 6 Фев 2016
- 49
- 10
Bat-ник для удаления одинаковых строк из текстовых файлов
Как и любому пользователю форума, мне часто приходится име6ть дело с текстовыми файлами. Для удаления одинаковых строк из текстовых файлов я пользуюсь батником, код которого приведён ниже.
Попробуйте его и вы. Уверен, что воспользовавшись им один раз, он навсегда припаркуется на вашем рабочем столе. К хорошему привыкаешь быстро
Как пользоваться:
- передать батнику файл аргументом (берем свой текстовый файл и просто пересовываем его мышкой на smf_sortcleaner.bat в проводнике windows), все остальное он сам сделает и создаст в папке с собой два файла, очищенный и повторы. А если просто запустить скрипт, без аргументов в смысле, то он обработает все .txt в папке с собой.
Другими словами, просто сохраните нижеприведенный текст в текстовом редакторе у себя на рабочем столе с расширением *.bat Это и есть сама программа. Для того, чтобы ею воспользоваться, т.е. чтобы удалить одинаковые строки в вашем текстовом файле, просто перетащите мышкой свой текстовый файл на этот батник.
Вот как он выглядит у меня. Я назвал его Text Duplicate Killer.bat
Требует для работы .net framework 2 или выше.
Исходный код открыт, можете переписывать под себя хоть в блокноте.
Исходный код батника. Можно скопировать, а затем сохранить в любом текстовом редакторе с расширением *.bat
[HIDE=10]
/*
@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 mar 2015 @ 13:29
//metaspamer.blogspot.com
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 != input[i - 1])
uniques.Add(input);
else
duplicates.Add(input);
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");
}
}
}
}
}
[/HIDE]
Батник сработал ? После перетаскивания текстового файла на батник у вас на рабочем столе должно появиться два файла: file_name_uniques.txt - это и есть название очищенного от дубликатов файла. Если в результате работы батника ничего не произошло, то это значит, что он не сработал. В таком случае предлагаю скачать этот же батник по ссылке и испробовать уже его в работе, а не тот, который вы создали из предыдущего поста.
Дело в том, что у меня у самого почему-то созданный bat-файл почему-то не срабатывает. почему - нет желания копаться. А скачанный по ссылке - работает прекрасно.
Как и любому пользователю форума, мне часто приходится име6ть дело с текстовыми файлами. Для удаления одинаковых строк из текстовых файлов я пользуюсь батником, код которого приведён ниже.
Попробуйте его и вы. Уверен, что воспользовавшись им один раз, он навсегда припаркуется на вашем рабочем столе. К хорошему привыкаешь быстро
Как пользоваться:
- передать батнику файл аргументом (берем свой текстовый файл и просто пересовываем его мышкой на smf_sortcleaner.bat в проводнике windows), все остальное он сам сделает и создаст в папке с собой два файла, очищенный и повторы. А если просто запустить скрипт, без аргументов в смысле, то он обработает все .txt в папке с собой.
Другими словами, просто сохраните нижеприведенный текст в текстовом редакторе у себя на рабочем столе с расширением *.bat Это и есть сама программа. Для того, чтобы ею воспользоваться, т.е. чтобы удалить одинаковые строки в вашем текстовом файле, просто перетащите мышкой свой текстовый файл на этот батник.
Вот как он выглядит у меня. Я назвал его Text Duplicate Killer.bat
Требует для работы .net framework 2 или выше.
Исходный код открыт, можете переписывать под себя хоть в блокноте.
Исходный код батника. Можно скопировать, а затем сохранить в любом текстовом редакторе с расширением *.bat
[HIDE=10]
/*
@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 mar 2015 @ 13:29
//metaspamer.blogspot.com
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 != input[i - 1])
uniques.Add(input);
else
duplicates.Add(input);
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");
}
}
}
}
}
[/HIDE]
Батник сработал ? После перетаскивания текстового файла на батник у вас на рабочем столе должно появиться два файла: file_name_uniques.txt - это и есть название очищенного от дубликатов файла. Если в результате работы батника ничего не произошло, то это значит, что он не сработал. В таком случае предлагаю скачать этот же батник по ссылке и испробовать уже его в работе, а не тот, который вы создали из предыдущего поста.
Дело в том, что у меня у самого почему-то созданный bat-файл почему-то не срабатывает. почему - нет желания копаться. А скачанный по ссылке - работает прекрасно.
Пожалуйста,
Вход
или
Регистрация
для просмотра содержимого URL-адресов!