Вот программа на C #, которая делает что-то вроде того, что вы просили. Я на самом деле не на 100% уверен, что вы хотите.
Использование: program.exe "outputfolder" "file1.txt" "file2.txt" "file3.txt"
Переписывает перечисленные файлы в выходную папку, обрабатываются в указанном порядке. Если имя пользователя встречалось в какой-либо строке или файле ранее, оно пропустит строку. Он не проверяет электронную почту или номер телефона в любом случае.
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);
}
}
}
}
}
}