metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-04-22 06:05 pm

C, parse comma-separated line

Кошерен ли такой код для разбиения строки, разделенной запятыми на отдельные строки: http://ideone.com/rhNXq ?

PS: strtok не признаю по идеологическим причинам - она меняет анализируемую строку, что меня крайне пугает, хотя в моем конкретном случае это не мешает.

PPS: безотносительно к strtok, в функции было минимум две ошибки - отсутствие проверки на выход за пределы буфера и попадание eol в последнюю строку (девайсина, с которой приходит строка, терминирует ее \r)

[identity profile] metaclass.livejournal.com 2012-04-22 09:12 pm (UTC)(link)
У меня там не только первое вхождение, а перебирает все вхождения. Т.е.я специально source_start модифицирую.

Проверки параметров и выход из цикла, да, надо исправить.
А вот насчет возвращаемых значений - почему именно так: 0 и -1?
Я, когда писал, ориентировался на что-то вроде: 0 (false) - завершение работы, 1 (true) - продолжение.
Стандартные же true и false вроде только в C99 появились.

[identity profile] slonik-v-domene.livejournal.com 2012-04-22 09:13 pm (UTC)(link)
http://metaclass.livejournal.com/680788.html?thread=11874900#t11874900

[identity profile] plumqqz.livejournal.com 2012-04-22 09:18 pm (UTC)(link)
"Как всякий истинный ученый, он был немногословен..."

[identity profile] http://users.livejournal.com/_slw/ 2012-04-22 09:20 pm (UTC)(link)
моя идея охуенна, ибо зачем повторно писать уже написанное?

[identity profile] lionet.livejournal.com 2012-04-22 09:27 pm (UTC)(link)
Условия задачи уже известны, да.

[identity profile] slonik-v-domene.livejournal.com 2012-04-22 09:29 pm (UTC)(link)
1) Потому, что ожидаемое поведение -1 - ошибка, а 0 и больше - успех.
2) true и false не существуют до тех пор, пока не существует типа bool. Тот, кто указывает #define true .... - тот является клиническим мудаком.
3) если надо найти все последовательности, следует просто вызывать функцию в цикле

[identity profile] slonik-v-domene.livejournal.com 2012-04-22 09:40 pm (UTC)(link)
1) Твоя идея говно.
2) Если ты без троллинга, в здравом уме и трезвой памяти считаешь что для такой задачи нужна библиотека PCRE ТОЛЬКО НА ТОМ ОСНОВАНИИ ЧТО ОНА УЖЕ ЕСТЬ, ты - клинический идиот. Ничего личного.

[identity profile] http://users.livejournal.com/_slw/ 2012-04-22 09:51 pm (UTC)(link)
1) моя идея охуенна
2.1) не, если мы точно и абсолютно уверены (готовы заложить голову), что никогда ничего ни в этом месте ни в другом близкого к pcre не понадобится -- то да, идея оверкил.
2.2) в жизни все будет не как в 2.1. а сначала мы захотим выкидывать завершающие пробелы. потом сравнивать со всякими CONNECT. и т.д. и т.п.

[identity profile] slonik-v-domene.livejournal.com 2012-04-22 10:00 pm (UTC)(link)
Все. Разговор можно далее не продолжать.
Кратко:

1) пошел нахуй
2.1) пошел нахуй со своим оверинжинирингом
2.2) пошел нахуй с идеей использования регулярных выражений при обработке нерегулярных языков

[identity profile] http://users.livejournal.com/_slw/ 2012-04-22 10:09 pm (UTC)(link)
разумеется строки, разделенные запятыми задются регулрной грамматикой.
это же csv с экранированием и кавычками.
вот теперь можешь идти нахуй.

[identity profile] slonik-v-domene.livejournal.com 2012-04-22 10:37 pm (UTC)(link)
>... задются регулрной грамматикой...

Идешь нахуй ты, т.к. про расширяемость и прочую хуиту ты начал первым. Что там и как расширять чтобы csv не стал вдруг нерегулярным - внешнее ограничение к твоей "бесконечной расширяемости". Потому как потом ВНЕЗАПНО выяснится что внутри строк переменные нужны, анэскейпинг из octal, unicode, hex, dec, control cheracters или еще что похожее, а, вот беда, PCRE с этой задачей справиться не может.

Для парзинга строк csv никакого PCRE не то, чтобы не надо, а вредно и бессмысленно. Оверинжиниринг там, где не требуется - признак программиста-мудака. Короче, с тобой все понятно. Продолжай рассказывать всем дальше про свою perl-травму головного мозга, хе-хе.

[identity profile] http://users.livejournal.com/_slw/ 2012-04-22 10:41 pm (UTC)(link)
о да, будем руками закатывать солнце вручную, а вдруг у нас будет csv, а не просто запятые?
нахуй, нахуй.
мне мое время дорого, а оргазма от заката вручную не испытываю.

[identity profile] esil0x.livejournal.com 2012-04-23 03:09 am (UTC)(link)
Вы всё продолжаете себя мучать? Первый и третий пункт рецепта как и в прошлом посте, меняется только второй:

#include <boost/tokenizer.hpp>
#include <iostream>

const std::string str("aaaa,ssdsd asdsd,ffffff");

int main() {
    typedef boost::tokenizer< boost::char_separator<char> > splitter;

    boost::char_separator<char> sep(",");
    splitter spl(str, sep);

    for (splitter::const_iterator it = spl.begin(), end = spl.end(); it != end; ++it) {
        std::cout << *it << "\n";
    }
}

[identity profile] metaclass.livejournal.com 2012-04-23 06:39 am (UTC)(link)
Да, надо будет С++ тоже попробовать, на следующей потусторонней задаче.

[identity profile] berezovsky.livejournal.com 2012-04-23 06:51 am (UTC)(link)
главное опиатные наркотики не пробовать

[identity profile] plumqqz.livejournal.com 2012-04-23 07:42 am (UTC)(link)
Господа, обратитесь наконец к мануалу:
http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B5_%28%D0%BF%D0%BE%D0%B5%D0%B4%D0%B8%D0%BD%D0%BE%D0%BA%29

А логомахия хуями - это, знаете, какой-то базар с цыганами, но без медведей.

[identity profile] http://users.livejournal.com/_slw/ 2012-04-23 08:32 am (UTC)(link)
издвеваешься?
это же ни какашками не покидаться, ни в мочой побрызгаться.

а что считается за палицу?

[identity profile] plumqqz.livejournal.com 2012-04-23 08:36 am (UTC)(link)
это же ни какашками не покидаться, ни в мочой побрызгаться.

Ребят, если вам хочется мочой побрызгаться, то это я даже не знаю какое извращение.

а что считается за палицу?

Ножка от офисного стола, скажем,

[identity profile] http://users.livejournal.com/_slw/ 2012-04-23 08:43 am (UTC)(link)
я только защищаюсь.

[identity profile] plumqqz.livejournal.com 2012-04-23 08:44 am (UTC)(link)
Так все только защищаются; например, нигде нет министерств нападения и везде только министерства обороны.

[identity profile] http://users.livejournal.com/_slw/ 2012-04-23 08:47 am (UTC)(link)
кажется есть где-то

[identity profile] plumqqz.livejournal.com 2012-04-23 08:49 am (UTC)(link)
Ну, исключение только подтверждает.
Кстати, а где?

[identity profile] nicka-startcev.livejournal.com 2012-04-23 08:54 am (UTC)(link)
только не забыть скорость замерить.
Плюсявые потоки заметно медленнее нормального ввода/вывода.
В опенскаде это увеличивает время рендеринга почти вдвое.

[identity profile] http://users.livejournal.com/_slw/ 2012-04-23 09:01 am (UTC)(link)
не помню, но кажется встеречал упоминание. но зуба не дам

[identity profile] jdevelop.livejournal.com 2012-04-23 11:46 am (UTC)(link)
хаскель же

Page 4 of 5