Как открыть и отсортировать txt file c#

313
30 октября 2018, 22:30

Как реализовать с помощью 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++)
                {
               // Тут действие по сортировке
            }
        }
Answer 1

Что мы сделали?

Я выучил класс 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));
    }
Answer 2

Как вариант:

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('@')), тогда отсечем все строчки, которые не содержать @, иначе будем падать!

READ ALSO
Количество входов в игру в течении недели

Количество входов в игру в течении недели

Подскажите как можно реализовать задачу:

231
Выходит из цикла for в с#

Выходит из цикла for в с#

При компиляции цикл не выполняется так как задуманоПодскажите где опечатка или недочёт

168
Выполнить 3d-трансформацию картинки

Выполнить 3d-трансформацию картинки

Есть картинка с экрана и картинка с камерыВо второй некая область сделана прозрачной

251
Ошибка при запуске Kafka (kafka_2.11-2.0.0) на этапе запуска zookeper

Ошибка при запуске Kafka (kafka_2.11-2.0.0) на этапе запуска zookeper

Хочу запустить apache kafka на Win7(На компе с Win10 все прошло гладко)

184