Как реализовать с помощью c#, сортировкутекста из txt файла, а именно, открыть файл txt я знаю как, но как отсортировать слова, которые найду в нем, к примеру:
Мне нужно, открыть файл mail.txt и отсортировать каждую строку, к примеру, строку ivanov@email.com нужно перенести в текстовый документ @email.com.txt.
string path_mail;
int count2 = System.IO.File.ReadAllLines(path2).Length;
OpenFileDialog openFileDialog2 = new OpenFileDialog();
openFileDialog2.Filter = "txt files (*.txt)|*.txt";
openFileDialog2.FilterIndex = 2;
openFileDialog2.RestoreDirectory = true;
if (openFileDialog2.ShowDialog() == DialogResult.OK)
{
path_mail = openFileDialog2.FileName;
for (int i = 0; i <count2; i++)
{
// Тут действие по сортировке
}
}
Я выучил класс Regex что и Вам советую. Долго бы провозился без него. Знаю можно короче но я пытался. Здесь мы объявили метод который получает конец строки с email в формате @somemail.com
что бы создать txt файл или вставить в него значение полной ссылки. Прошлись циклом foreach по массиву строк из файла-не отсортированного что бы внести данные в файл и узнать в какой его добавлять. Далее есть комментарии я думаю там всё понятно.
Удачи. SeeSharp
Вот код:
static void Main(string[] args)
{
string Rpattern = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
Regex regex = new Regex(Rpattern);
var pathFile = @"D:\ВЛАД\test.txt";//Путь к файлу из которого нужно сортировать значения
string[] tosort = File.ReadAllLines(pathFile);//массив из строк которые получили из файла
foreach (string fromFile in tosort)
{
if (regex.Match(fromFile).Success)
{
File.AppendAllText($@"D:\\ВЛАД\Folder\{GetEndType(fromFile)}.txt", fromFile);//если строка из файла оканчаеться на один из фильтров
//Мы записываем его текст в файл с названием его конца (да сложно) а если его нету то создадим но всеравно закинем туда этот текст
}
}
}
static string GetEndType(string txt)
{
string Rpattern2 = @"@\w+([-.]\w+)*\.\w+([-.]\w+)*$";
Regex regex = new Regex(Rpattern2);
if (!regex.Match(txt).Success)
return txt;
else
return GetEndType(txt.Remove(0, 1));
}
Как вариант:
File.ReadAllLines("mails.txt")
.Select(x => x.Split('@'))
.Select(x => new {Domain = x[1], Mail = x[0]})
.GroupBy(x => x.Domain)
.ToDictionary(d => d.Key, d => d.Select(x => $"{x.Mail}@{d.Key}"))
.ToList()
.ForEach(f => File.AppendAllLines($"@{f.Key}.txt", f.Value));
File.ReadAllLines("mails.txt")
- читаем исходный файл построчно и заносим в массив..Select(x => x.Split('@'))
- разбиваем каждую строку на две части по @
..Select(x => new {Domain = x[1], Mail = x[0]})
- для удобства создаем анонимный тип (можно и без него обойтись по сути..)..GroupBy(x => x.Domain)
- группируем все по домену (@domain.net
)..ToDictionary(d => d.Key, d => d.Select(x => $"{x.Mail}@{d.Key}"))
- формируем словарь, где Key будет содержать домен, а Value, массив собранных обратно строк..ToList()
- чисто что бы не писать цикл, а использовать его удобный Linq вариант .ForEach()
(можно без этого, тогда придется пройтись циклом отдельно)..ForEach(f => File.AppendAllLines($"@{f.Key}.txt", f.Value))
- ну и проходим по всем данным, записывая все по своим файлам (формат файла: @domain.txt
).Также тут можно после чтения файла добавить что то вроде .Where(x=>x.Contains('@'))
, тогда отсечем все строчки, которые не содержать @
, иначе будем падать!
Виртуальный выделенный сервер (VDS) становится отличным выбором
При компиляции цикл не выполняется так как задуманоПодскажите где опечатка или недочёт
Есть картинка с экрана и картинка с камерыВо второй некая область сделана прозрачной
Хочу запустить apache kafka на Win7(На компе с Win10 все прошло гладко)