Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для Filislav
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547

Сортировка данных

07.12.2010, 22:11. Показов 2177. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан текстовый файл в котором информация представлена в виде:

site.ru 03kdo5m6932n123nmakr94m6n10fo3m1 781 id100 user67 - broote log-aleksandr

Необходимо провести сортировку по имени aleksandr и вернуть строку вида:

log-aleksandr site.ru id=.. broote user67

Я начал копать в сторону массива, но чувствую что-то не то, подскажите направление плиз.

Вот начало проги, скажите правильно ли я мыслю.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
namespace Sortirovka
{
    class Program
    {
        static void Main(string[] args)
        {
            System.IO.StreamReader sr = new System.IO.StreamReader("log.txt");
            string log = sr.ReadToEnd();
            sr.Close();
            char[] separator = {' '};
            string[] ish = log.Split(separator);
            Console.WriteLine("Введи имя сотрудника");
            string Name;
            Name = Console.ReadLine();
            string[] sort = new string [ish.Length];
            for (int i=0;i<ish.Length;i++)
            {
                if(ish[i]==Name)
                {
 
 
 
        }
    }
}
Добавлено через 1 час 18 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Sortirovka
{
    class Program
    {
        private static string[][] PrepareData(string[] data)//подготовка масива
        {
            int count = data.Length;
            string[][] res = new string[count][];
            for(int i = 0; i < count; i++)
            {
 
                res[i] = data[i].Split(' ');
            }
            return res;
        }
    
 
        static void Main(string[] args)
        {
            string [] data = File.ReadAllLines("log.txt");
            string[][] sdata = PrepareData(data);
            Console.WriteLine("Введите имя сотрудника");
            string name = Console.ReadLine();
            for(int i=0;i<sdata.Length;i++)
            {
                
                
                  
                
 
        }
    }
}
В общем начал по другому. Подскажите как написать алгоритм сортировки, да и вообще любые полезные советы приму с благодарностью.

Добавлено через 56 минут
А еще можно ведь через List<string> делать вроде, и потом сортировка проще должна быть, я прав? Очень надо программу написать.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.12.2010, 22:11
Ответы с готовыми решениями:

Сортировка выбором, сортировка вставкой, сортировка заменой, сортировка обменом ("пузырьковая" сортировка)
Создать класс, содержащий массив и реализующий алгоритмы сортировки и бинарного поиска в этом массиве. Класс описать с помощью...

Сортировка данных
Подскажите, пожалуйста, как пользоваться оператором Sort(). В программе данные вводятся с клавиатуры в массив, а затем их нужно...

Сортировка данных в файле
В файле находится список имен. Нужно, чтобы программа рассортировала по алфавиту эти имена. Число имен в файле 20. Большая просьба, чтобы...

9
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
07.12.2010, 22:30
Цитата Сообщение от Filislav Посмотреть сообщение
Я начал копать в сторону массива
можно двумерным массивом, можно коллекцией, можно dataTable...
В один столбец отрезаешь от последнего пробела до конца, в другой то что останется, сортируешь, и выводишь результат в требуемом виде.
0
 Аватар для Filislav
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
07.12.2010, 23:18  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Sort_2
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (string item in File.ReadAllLines("log.txt"))
            {
                string [] sts = item.Split('\n');
                Console.WriteLine("Bведите имя");
                string name = Console.ReadLine();
                foreach (string st in sts)
                {
                    string s = st.Trim();
                    if(s == name)
                    {
                        StreamWriter sw = new StreamWriter("res.txt");
 
                    }
                }
        }
    }
}
А если так?
Все я запутался совсем, наверное до утра отложу, ниче уже не соображаю.

Добавлено через 20 минут
В общем без изменения вида строки пока написал так

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Sort_2
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (string item in File.ReadAllLines("log.txt"))
            {
 
                string[] sts = item.Split('\n');
                Console.WriteLine("Bведите имя");
                string name = Console.ReadLine();
                foreach (string st in sts)
                {
                    string s = st.Trim();
                    if (s == name)
                    {
                        System.IO.FileInfo fi = new System.IO.FileInfo("\\res.txt");
                        StreamWriter sw;
                        sw = fi.CreateText();
                        sw.WriteLine(st);
                        sw.Close();
 
                    }
                    else
                        continue;
                }
                Console.ReadKey();
            }
        }
    }
}
Не работает. Даже не сортирует строки.

Добавлено через 7 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Sort_2
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (string item in File.ReadAllLines("log.txt"))
            {
 
                string[] sts = item.Split('\n');
                Console.WriteLine("Bведите имя");
                string name = Console.ReadLine();
                foreach (string st in sts)
                {
                    string[] ss = st.Split(' ');
                    foreach (string s in ss)
                    {
 
                        if (s == name)
                        {
                            System.IO.FileInfo fi = new System.IO.FileInfo("res.txt");
                            StreamWriter sw;
                            sw = fi.CreateText();
                            sw.WriteLine(st);
                            sw.Close();
 
                        }
                        else
                            continue;
                    }
                }
                Console.ReadKey();
            }
        }
    }
}
Дополнил, эффекта ноль. И даже файл не создает.

Добавлено через 10 минут
Погорячился, файл создает но записывает туда только первую найденную строку и все. Извините за назойливость прога очень нужна.
0
 Аватар для Lucius Kain
129 / 129 / 22
Регистрация: 10.11.2010
Сообщений: 313
07.12.2010, 23:46
C#
1
2
3
4
5
6
7
8
            string a = (new StreamReader("file.dat")).ReadToEnd();
            a = string.Join(Environment.NewLine,
                            a.Split(new string[]{Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
                             .OrderBy(x => x.Split(' ').Last())
                             .Select(x => x.Split(' '))
                             .Select(x => string.Join(" ", new string[]{x[7], x[0], x[3], x[1], x[2], x[4], x[6]})));
            Console.WriteLine(a);
            Console.ReadKey();
1
 Аватар для Filislav
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
08.12.2010, 09:15  [ТС]
Извиняюсь, дома код приведенный выше работал, а на работе выдает ошибки. Дома Студия 2010 Framework 4, а на работе 2008 и Framework 3.5. Может быть в этом причина?
Привожу программу целиком:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace Sort3
{
    class Program
    {
    
        static void Main(string[] args)
        {
            string a = (new StreamReader("log.txt")).ReadToEnd();
            a = string.Join(Environment.NewLine,
                            a.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
                             .OrderBy(x => x.Split(' ').Last())
                             .Select(x => x.Split(' '))
                             .Select(x => string.Join(" ", new string[] { x[7], x[0], x[3], x[1], x[2], x[4], x[6] })));
            Console.WriteLine(a);
            System.IO.FileInfo fi = new System.IO.FileInfo("res.txt");
            System.IO.StreamWriter sw;
            if (fi.Exists)
                sw = fi.AppendText();
            else
                sw = fi.CreateText();
            sw.WriteLine(a);
            sw.Close();
 
            Console.ReadKey();
        }
    }
}
Добавлено через 9 минут
Ошибка здесь
C#
1
.Select(x => string.Join(" ", new string[] { x[7], x[0], x[3], x[1], x[2], x[4], x[6] })));
Cannot convert from System.Collections.Generic.IEnumerable'< string>' to string.

Добавлено через 44 минуты
Ребята помогите пожалуйста с программой, все равно как реализована будет, мне не хватает мозгов и знаний. Через двумерный массив не понимаю как строки в двумерный массив преобразовать.
0
 Аватар для Lucius Kain
129 / 129 / 22
Регистрация: 10.11.2010
Сообщений: 313
08.12.2010, 09:30
C#
1
2
3
4
5
            a = string.Join(Environment.NewLine,
                            a.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
                             .OrderBy(x => x.Split(' ').Last())
                             .Select(x => x.Split(' '))
                             .Select(x=>string.Join(" ", new string[] { x[7], x[0], x[3], x[1], x[2], x[4], x[6] })).ToArray());
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
08.12.2010, 09:31
Строка есть массив символов, а двумерный массив есть одномерный массив одномерных массивов. Получается одномерный массив строк и всего делов.
0
 Аватар для Lucius Kain
129 / 129 / 22
Регистрация: 10.11.2010
Сообщений: 313
08.12.2010, 09:40
taras atavin, это так?)

Добавлено через 3 минуты
string.Join в Framework3.5 не работает с IEnumerable<string>, вот и вся беда.
0
 Аватар для Filislav
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
08.12.2010, 09:46  [ТС]
Я прекрасно понимаю что строка это массив смволов. Делаю так, читаю весь файл, бью на строки - получаю массив строк, далее каждую строку я бью на массив слов - получаю одномерный массив слов, а надо то двумернуый массив иначе поиск "слова" идет только по одной строке и все. Вот привожу пример, как пытался сделать.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    class Program
    {
        static void Main(string[] args)
        {
            foreach (string item in File.ReadAllLines("log.txt"))
            {
 
                string[] sts = item.Split('\n');
                Console.WriteLine("Bведите имя");
                string name = Console.ReadLine();
                foreach (string st in sts)
                {
                    string[] ss = st.Split(' ');
                    foreach (string s in ss)
                    {
 
                        if (s == name)
                        {
                            System.IO.FileInfo fi = new System.IO.FileInfo("res.txt");
 
                            StreamWriter sw;
                            if (fi.Exists)
                                sw = fi.AppendText();
                            else
                                sw = fi.CreateText();
                            sw.WriteLine(st);
                            sw.Close();
 
                        }
                        else
                            continue;
                    }
                }
                Console.ReadKey();
            }
 
        }
    }
}
Добавлено через 3 минуты
Lucius Kain, огромное спасибо за код, буду разбираться с linq, просто начал учить прграммирование и C# недавно, и до него еще не добрался, а программа понадобилась уже сейчас.
0
 Аватар для Lucius Kain
129 / 129 / 22
Регистрация: 10.11.2010
Сообщений: 313
08.12.2010, 09:47
В данном случае LINQ идеальный вариант, потому что работа идет с коллекциями данных.
Тут еще можно сделать для удобства что-то типа:
C#
1
Select(x=>new{username=x[7}, ....})
чтобы дать имена столбцам в данном случае, а то по индексам и правда не очень удобно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.12.2010, 09:47
Помогаю со студенческими работами здесь

Сортировка данных в массиве
Зрдавствуйте, эксперты. Нуждаюсь в Вашей помощи. Необходимо отсортировать массив с числами (от 1 до ...) У меня есть массив Klass....

Сортировка данных в реальном времени
Всем привет собственно вопрос. Я осуществляю поиск файла по имени из текущей директории. Файлов может быть и 100 и 200 и 1000. ...

Сортировка данных ViewReport по дате
Можно ли как-то это осуществить? Мозг уже просто не варит. Есть база, допустим, с продажами( там указывается каждая проданная вещь). Мне...

Сортировка данных в массиве из 2 столбцов и 10 строк
Здравстуйте! Прошу Вас помочь написать программу по следующему условию: Дана матрица из 2 столбцов и 10 строк. Первый элемент каждой...

Сортировка datagridview по столбцу с разными типами данных
Доброго времени суток, простите, если где-то было, но гугл ничего не дает по запросу. Задача: Имеется datagridview, в которой имеются...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru