Есть текстовый файл с именами , кличками и фамилиями. Каждое имя, фамилия, отчество начинаются с новой строки. Нужно создать новый текстовый файл где все эти люди должны быть отсортированны по имени или по фамилии или по отчеству или по кличке. Притом у некоторых людей могут быть не только одна кличка. Пример "Вася Корж Кисель Петров \t" Андрей Хмурый Иванов ". При сортировке по фамилии на первой строке нового текстового файла должен быть Андрей затем Вася. При этом порядок слов в строке не должен менаться
Console.WriteLine("Choose sorting method of customers: 1. for Last name 2. for first given name");
string inFile = @"/unsort-customers.txt";
string outFile = @"/sort-costumers.txt";
string booferFile =@"/boofer.txt" ;
var contents = File.ReadAllLines(inFile);
foreach (var item in contents)
{
string[] names = item.Split(' ');
string name = names.First();
string surname = names.Last();
string klichka1 = names[1];
string klichka = names[2];
using (StreamWriter file = new StreamWriter(booferFile, true))
{
if (chooseButton == "1")
{
file.WriteLine((name + " " + surname).Trim());
}
else if (chooseButton == "2")
{
file.WriteLine((klichka1 + " " + name + " "
surname).Trim());
}
else if (chooseButton != "1" || chooseButton != "2" )
{
Console.WriteLine("Error");
break;
}
}
}
Наперед: код писать умышленно не буду.
Код слишком простой и должен быть реализован тобой самим. Но распишу алгоритм.
Human
который отвечает за человека. (имя, фамилия, кличка1, кличка2, кличка3 и что там еще у тебя может быть). В этом же классе должен быть метод заполнения со строки ( FromString(string str)
) и метод преобразования инстанса в строку -- переопределенный ToString()
List<Human>
OrderBy(x=>x....)
Сохрани список в файл используя Stream и AppendLine метод используя все тот же метод ToString() у каждого из людей
public FromString(string str)
{
string[] arr = str.Split(' ');
FirstName = GetFromIndexIfExist(arr, 0); //то есть положение слова в строке из оригинального файла
LastName = GetFromIndexIfExist(arr, 1);
FictionName1 = GetFromIndexIfExist(arr, 2);
FictionName2 = GetFromIndexIfExist(arr, 3);
FictionName3 = GetFromIndexIfExist(arr, 4);
}
public override string ToString() =>
$"{FirstName} {LastName} {FictionName1} {FictionName2} {FictionName3}";
//то есть та последовательность, которая у тебя в оригинале файла
private string GetFromIndexIfExist(string[] arr, index) =>
(arr.Count() >= index) ? arr[index] : string.Empty;
все же добавлю свой вариант
// опускаем построчное чтение файла (отчества тут тоже нет :))
var lines = new List<string> {
"Вася Пупкин Васёк Квас",
"Архимед Эвриков Эврик"
};
var orderedList = lines
.Select(line =>
{
// далее нет необходимых проверок, хотя по хорошему они должны быть:
// - существование нужного индекса
// - очистка результатов
var temp = line.Split(' ');
var otherNames = temp.Skip(2).ToList();
return new
{
InitialStr = line,
FirstName = temp[0],
LastName = temp[1],
OtherNames = otherNames,
// выбираем кличку прямой сортировкой
ONameAsc = otherNames.OrderBy(n => n).FirstOrDefault() ?? string.Empty,
// выбираем кличку обратной сортировкой
ONameDesc = otherNames.OrderByDescending(n => n).FirstOrDefault() ?? string.Empty
};
})
//.OrderBy(it => it.LastName)
//.OrderByDescending(it => it.FirstName)
//.OrderBy(it => it.ONameAsc)
.OrderByDescending(it => it.ONameDesc)
.Select(it=> it.InitialStr)
.ToList();
// осталось записать результат в файл
Проще всего, наверное, вначале преобразовать текстовый файл в файл базы данных. Например,если, каждая запись начинается с новой строки, считать файл построчно, потом каждую строку распарсить, а результат добавить в БД. После этого вам будет доступна вся мощь СУБД. Обратное преобразование (БД-файл) производится элементарно...
Виртуальный выделенный сервер (VDS) становится отличным выбором
Имеется пул gprs модемов, подключенных к COM - портамСписок клиентов, с которыми должны связываться модемы, гораздо больше количества модемов
Для печати на принтере Argox, подключенном к USB-порту использую команду
В операционной системе есть куча текста который можно локализироватьДопустим, мне нужно узнать как называется окно "Save As" в локализации на даном...
Работаю над проектом в Visual Studio C#В проекте есть несколько форм и в каждом из них я использую oledbconnection и oledbadapter для подключения БД