Filtragem de lista de palavras e remoção duplicada em vários arquivos - Ferramenta ou Programa?

0

Eu tenho uma lista de palavras que contém, nome de usuário, número de telefone e e-mail. É coletado de várias fontes, portanto, em tamanhos variáveis. Preciso filtrar o nome de usuário duplicado e todas as coisas seguidas.

Até agora eu usei o método usando o Notepad ++. Mas as limitações são preencher filtro apenas um arquivo de cada vez. E não pode lidar com arquivos como 500MB.

então, se um arquivo tiver [email protected] aqui, significa que o mesmo não deve aparecer em outro arquivo.

No simples eu preciso alcançar o resultado acima pelo Notepad ++ para vários arquivos que são superiores a 500 MB.

Quaisquer ferramentas ou programas? Ou qualquer snippet Java ou C # eficiente?

    
por Jones 19.05.2012 / 09:24

1 resposta

0

Aqui está um programa c # que faz .. algo parecido com o que você pediu. Na verdade, não tenho 100% de certeza do que você quer.

O uso é: program.exe "outputfolder" "file1.txt" "file2.txt" "file3.txt"

Ele reescreve os arquivos listados na pasta de saída, processados na ordem especificada. Se um nome de usuário foi encontrado em qualquer linha ou arquivo antes, ele irá ignorar a linha. Não verifica o email nem o número de telefone de qualquer forma.

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

namespace CreateUniqueFile
{
    class Program
    {
        static void Main(string[] args)
        {
            string fullpath;
            string outpath;
            List<string> files = new List<string>();

            for (int i = 1; i < args.Length; i++)
            {
                fullpath = Path.GetFullPath(args[i]);
                if (!File.Exists(fullpath))
                    Console.WriteLine("File not found: {0}", fullpath);
                else
                {
                    files.Add(fullpath);
                    Console.WriteLine(fullpath);
                }
            }

            if (files.Count == 0)
            {
                Console.WriteLine("No files provided!");
                return;
            }
            else
            {
                outpath = Path.GetFullPath(args[0]);
                Console.WriteLine("Output will go to folder: \"{0}\"", outpath);
                Console.WriteLine("Process files in the above order? (Y/N)");
                bool yes = false;
                while (!yes)
                {
                    switch (Console.ReadKey().Key)
                    {
                        case ConsoleKey.Y:
                            yes = true;
                            break;
                        case ConsoleKey.N:
                            return;
                        default:
                            break;
                    }
                }
            }

            if (!Directory.Exists(outpath))
                Directory.CreateDirectory(outpath);

            HashSet<string> seennames = new HashSet<string>();

            string line, username;

            foreach (string path in files)
            {
                string writepath = outpath + '\' + Path.GetFileName(path);
                if (File.Exists(writepath))
                {
                    writepath = outpath + '\' + Path.GetFileNameWithoutExtension(path) + " (2)" + Path.GetExtension(path);
                    // Dodgy thing to increment the number, don't touch!
                    while (File.Exists(writepath))
                    {
                        writepath = writepath.Substring(0, writepath.LastIndexOf('(') + 1) +
                            (Int32.Parse(writepath.Substring(writepath.LastIndexOf('(') + 1, writepath.LastIndexOf(')') - writepath.LastIndexOf('(') - 1)) + 1) +
                            writepath.Substring(writepath.LastIndexOf(')'));
                    }
                }

                using (StreamWriter writer = new StreamWriter(writepath))
                {
                    using (StreamReader reader = new StreamReader(path))
                    {
                        while (!reader.EndOfStream)
                        {
                            line = reader.ReadLine();
                            username = line.Split('-')[0];
                            if (!seennames.Contains(username))
                            {
                                writer.WriteLine(line);
                                seennames.Add(username);
                            }
                        }

                        Console.WriteLine("{0} processed, output to {1}", path, writepath);
                    }
                }
            }
        }
    }
}
    
por 19.05.2012 / 11:03