![]() |
|
Модераторы: xvr |
![]()
|
|
| Larrikin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
Соображение такое - сделать программу по модели grep, то есть брать текстовые данные со стандартного входа или файла и отдавать на стандартный выход или файл...
данные - несколько (вряд ли тысячи, скорее десятки, может сотни) строк. Каждая несет один набор, состоящий из чисел, разделенных двоеточием: целое число со знаком (id) дробное число со знаком (value) на выходе в том же формате строки: целое число со знаком(id1) целое число со знаком(id2) символьная строка(action) Какой пример реализации по такой модели самый удачный и несложный? |
|||
|
||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
так тут вообще нет ничего сложного
Это сообщение отредактировал(а) MAKCim - 2.9.2007, 15:00 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 3 Всего: 162 |
имхо, можно обойтись и без демона... awk, perl неплохо подойдут для такой задачи. Правда, не понял логику преобразования... |
|||
|
||||
| Larrikin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
про демона речи уже и нету, по крайнем мере пока не доказана недостаточность функциональности простого "фильтра"
реализация на интерпретируемом языке скриптов уже есть - падает после полтора-двух десятков входных строк из-за переполнения свопа. пример какой-то куцый - на простое чтение и запись, а перед работой с данными нужно проделать дофига всякой работы ведь взять кусок строки от начала до первого двоеточия, выбрать из него ноль или один знаков минус с последующими не менее одной цифры и только цифры запомнить это число как id убедиться, что такого id до сих пор не было в этом наборе данных если что не так - ругнуться в stderr и попробовать выдрать данные из следующей строки взять кусок строки от первого двоеточия до второго попробовать преобразовать его в число в обычной нотации или в научной или шестнадцатиричной и т.д. запомнить это число как value если никак не получилось - ругнуться в stderr и попробовать выдрать данные из следующей строки добавить набор из id, value в массив данных для дальнейшей работы обработать следующую строку |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
ну так проделай эту работу ты ж сам алгоритм написал -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Larrikin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
изобрести колесо?
боюсь, квадратное получится... наверняка уже полно отлаженных есть реализаций - работают же утилиты с файлов /etc/master.password как раз похожий набор строк... какие реализации считаются самыми удачными/проверенными? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
Larrikin, смотри в сторону strtok(). Она позволяет разбивать строку разделенную чем-то на подстроки.
|
|||
|
||||
| Larrikin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
Парни, помогите... не могу найти время на то, чтобы разобраться самому, как реализовать этот простой алгоритм на C.
Если кто может написать эти несколько строк кода интерфейса, чтобы можно было вставить обработку свою по аналогии примера MAKCim - заплачу 70 WMZ с протекцией примерное ТЗ в этой теме, если надо подробнее - расскажу в ICQ 129916863 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
Попробуй такой код:
|
|||
|
||||
| Larrikin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
выглядит красиво, а насколько он устойчив к входным данным и всегда ли сможет принять, например, такие? -1: (подразумевается пара -1 и 0) - 1: 0 (подразумевается пара -1 и 0) 111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111:1 (корректно игнорить строку) 12: - 0.12123123 (пробелы после двоеточия, знака и перед переводом строки, подразумевается 12 и -0.12123123 ) и еще один момент - для обработки данных нужен массив, то есть одновременно нужны и первое и третье значения и т.п. размер массива не обязательно делать бесконечно возмножной размерности (память жалко на ошибки тратить), можно ограничить, например 1000 элементов (по-хорошему задавать бы это опциями при старте, но я там поглядел реализации и погрустнел - это еще пару месяцев фтыкать) Это сообщение отредактировал(а) Larrikin - 10.9.2007, 19:20 |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
Ты возьми и попробуй. Если тебе нужен исполнитель - в другой раздел.
|
|||
|
||||
| Larrikin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
вот что получилось и даже компилируется gcc ncalc.c -o ncalc:
сделал такой файлик data > cat data -1:20 0:0 1:21 выполняю ./ncalc < data получаю в консоле бесконечный цикл: invalid format invalid format invalid format invalid format invalid format invalid format invalid format invalid format invalid format invalid format invalid format invalid format invalid format invalid format invalid format invalid format invalid format invalid format invalid format invalid format invalid format ^C > непонятно... похоже, не отрабатывает !feof(stdin), но что это и как должно отрабатываться я в своих книжках не нашел, в инете только готовые примеры использования, на вид такие же... |
|||
|
||||
| Larrikin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
еще одна странность - если поставить #define MAX_DATALINE 2, то на тех же данных вывод получается такой:
> ./ncalc < data invalid format -1:20.000000 0:0.000000 1:21.000000 > очень непонятно, почему три строки обработал, а не две... |
|||
|
||||
| Larrikin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
ну конечно, условие неверное, вот так работает ожидаемо:
|
|||
|
||||
| Larrikin |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 15.8.2007 Репутация: нет Всего: нет |
не могу найти инфу, может ли функция возвращать массив?
или, например, указатель на масссив? просто код разрастается, получается мусора много, хочу сделать чтение потока в массив данных отдельной функцией, но не знаю как... |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |