User:Dart Raiden/Дублирующиеся строки: Difference between revisions

From Miranda NG
Jump to navigation Jump to search
(Created page with "В пределах перевода ''конкретного плагина'' исходные (англоязычные) строки дублироваться не дол...")
 
No edit summary
Line 1: Line 1:
В пределах перевода ''конкретного плагина'' исходные (англоязычные) строки дублироваться не должны. В этом случае Миранда будет использовать первый встреченный вариант перевода.
В пределах перевода ''конкретного плагина'' исходные (англоязычные) строки дублироваться не должны. В этом случае Миранда будет использовать первый встреченный вариант перевода.


Для нахождения дублирующихся строк можно воспользоваться [https://www.dropbox.com/s/j8swrmrgqju2bwy/smf_sortcleaner.bat пакетным файлом], взятым с http://metaspamer.blogspot.ru/2011/12/programma-dlia-udaleniia-odinakovykh.html и немного измененным под наши нужды.
Для нахождения дублирующихся строк можно воспользоваться пакетным файлом (.bat), взятым с http://metaspamer.blogspot.ru/2011/12/programma-dlia-udaleniia-odinakovykh.html и немного измененным под наши нужды.
Необходимо передать батнику файл аргументом (берем свой текстовый файл и перетаскивам его мышкой на smf_sortcleaner.bat в проводнике Windows), все остальное он сам сделает и создаст в папке с собой файл, содержаший дублирующиеся строки. А если запустить без аргументов, то он обработает все .txt в папке с собой.
Необходимо передать батнику файл аргументом (берем свой текстовый файл и перетаскивам его мышкой на smf_sortcleaner.bat в проводнике Windows), все остальное он сам сделает и создаст в папке с собой файл, содержаший дублирующиеся строки. А если запустить без аргументов, то он обработает все .txt в папке с собой.
Требует для работы .NET Framework не ниже 2 версии.
Требует для работы .NET Framework не ниже 2 версии.
После этого удобно пройтись поиском по полученным файлам и отыскать все строки, содержащие символ "[". Это и будут искомые "лишние" строки, присутствие которых в ленгпаке бессмысленно.
После этого удобно пройтись поиском по полученным файлам и отыскать все строки, содержащие символ "[". Это и будут искомые "лишние" строки, присутствие которых в ленгпаке бессмысленно.
Содержимое smf_sortcleaner.bat:
<nowiki>
/*
@echo off && cls
%WinDir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /nologo /out:"%~0.exe" %0
"%~0.exe" %1
del "%~0.exe"
exit
*/
//8 oct 2012 @ 18:36
//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[i] != input[i - 1])
                            uniques.Add(input[i]);
                        else
                            duplicates.Add(input[i]);
                    Console.Write("\nsaving..\n");
                    File.WriteAllLines(path + GetFilename(Path.GetFileNameWithoutExtension(filename), false), duplicates.ToArray(), enc);
                    Console.Write("\n\n");
                }
            }
        }
    }
}
</nowiki>

Revision as of 02:05, 22 June 2014

В пределах перевода конкретного плагина исходные (англоязычные) строки дублироваться не должны. В этом случае Миранда будет использовать первый встреченный вариант перевода.

Для нахождения дублирующихся строк можно воспользоваться пакетным файлом (.bat), взятым с http://metaspamer.blogspot.ru/2011/12/programma-dlia-udaleniia-odinakovykh.html и немного измененным под наши нужды. Необходимо передать батнику файл аргументом (берем свой текстовый файл и перетаскивам его мышкой на smf_sortcleaner.bat в проводнике Windows), все остальное он сам сделает и создаст в папке с собой файл, содержаший дублирующиеся строки. А если запустить без аргументов, то он обработает все .txt в папке с собой. Требует для работы .NET Framework не ниже 2 версии. После этого удобно пройтись поиском по полученным файлам и отыскать все строки, содержащие символ "[". Это и будут искомые "лишние" строки, присутствие которых в ленгпаке бессмысленно. Содержимое smf_sortcleaner.bat: /* @echo off && cls %WinDir%\Microsoft.NET\Framework\v2.0.50727\csc.exe /nologo /out:"%~0.exe" %0 "%~0.exe" %1 del "%~0.exe" exit */ //8 oct 2012 @ 18:36 //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[i] != input[i - 1]) uniques.Add(input[i]); else duplicates.Add(input[i]); Console.Write("\nsaving..\n"); File.WriteAllLines(path + GetFilename(Path.GetFileNameWithoutExtension(filename), false), duplicates.ToArray(), enc); Console.Write("\n\n"); } } } } }