LINUX.ORG.RU

Как считать из файла набор строк с числами для сортировки этих строк по столбцу?

 


1

1

Файл состоит из строк вида: 11:22:33 9 value 20 техт

Нужно считать и по 4 колонке сортировать строки. Пробую так:

FILE * f = fopen("log.txt","r");
        if(!f)
            printf("Error open file\n");
        else
        {
            while(!feof(f))
            {
                char * ptr_str = fgets(buf,sizeof(buf),f);


                if( ptr_str != NULL)
                {
                    printf("\n string=%s",buf);

                }
                else
                {
                    printf("\n string null!");
                }
            }
            fclose(f);

        }
Как дальше из buf вытащить 4 столбик для сортировки.



Последнее исправление: beastie (всего исправлений: 3)

Ответ на: комментарий от anonymous

Нормально долбит-то хоть?

Да однообразно, без задора, слыша только собственные мысли.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Неужели непонятно, что это отвратительно?

Ну хорошо, больше в этом треде тебе отвечать не буду. Я тут полстраницы ответов написал, но ты прав, это нет смысла читать, и вряд ли приятно.

i-rinat ★★★★★
()
Ответ на: комментарий от anonymous

Тоже верно. В общем случае нужен какой то хитрый алгоритм сортировки из мира мэпредьюс. Кстати - может знаешь, как эту проблему решает sort?

pon4ik ★★★★★
()
        private int Compare(string s1, string s2, string splitter)
        {
            try
            {
                string[] s1Strings = s1.Split(new string[] { splitter }, StringSplitOptions.None);
                string[] s2Strings = s2.Split(new string[] { splitter }, StringSplitOptions.None);
                return string.Compare(s1Strings[3], s2Strings[3]);
            }
            catch (Exception e)
            {
                //ошибка - считаем, что строки равны
                return 0;
            }
        }
anonymous
()
Ответ на: комментарий от anonymous

Неужели? А чего бы не подождать в цикле, пока память не появится?

Тоже вариант, только надо будет вывести предупреждение, потому что память может никогда и не появиться.

Вот только не надо лезть со своими гразными плюсами в си.

Это не плюсы, в ООП можно и в Си.

RisuX3
()
Ответ на: комментарий от RisuX3

Вот только не надо лезть со своими гразными плюсами в си.

Это не плюсы, в ООП можно и в Си.

Вот только не надо лезть со своими гразными плюсами в си.

anonymous
()
Ответ на: комментарий от anonymous

Кажется, этого бота на Си заело. Типично для Си.

anonymous
()

А вообще, задача только прочитать и отсортировать? Если так, то зачем C когда для этих целей проще использовать AWK.

sniper21 ★★★★★
()
Ответ на: комментарий от sniper21

Да, только отсортировать. Вот с awk не очень, можете дать пример как отсортировать всю таблицу по столбцу на awk.

user2132
() автор топика
Ответ на: комментарий от user2132

$0 это вся строка $1 первый столбец ...

по-умолчанию awk разбивает столбцы по пробелам, как у вас.

тестовый файл:
12:17:33 9 value 20 техт1
13:19:33 3 value 22 техт2
13:21:34 4 value 23 техт3
14:23:35 5 value 25 техт4
15:24:36 6 value 21 техт5
16:29:37 7 value 23 техт6
cat log.txt | gawk '{print $4}' | sort -nr

результат:
25
23
23
22
21
20

cat log.txt | gawk '{print $4}' | sort -n

результат:
20
21
22
23
23
25

Дальше если нужно можно вычленить нужные строки. Вообще awk это Си-подобный язык программирования, в котором есть возможность задавать пользовательские функции.

sniper21 ★★★★★
()
Последнее исправление: sniper21 (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.