metaclass: (Default)
[personal profile] metaclass
Кошерен ли такой код для разбиения строки, разделенной запятыми на отдельные строки: http://ideone.com/rhNXq ?

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

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

Date: 2012-04-22 03:09 pm (UTC)
From: [identity profile] blacklion.livejournal.com
man strsep strtok

Date: 2012-04-22 03:13 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Про них какие-то неприятные вещи в man написаны, меня идея модифицировать строку ради парсинга крайне пугает.

Date: 2012-04-22 03:17 pm (UTC)
From: [identity profile] blacklion.livejournal.com
Есть ещё strcspn() и strspn() и strpbrk()
Edited Date: 2012-04-22 03:18 pm (UTC)

Date: 2012-04-22 03:13 pm (UTC)
From: [identity profile] dair-spb.livejournal.com
Как предлагаешь парсить потенциальный гигабайт?

(no subject)

From: [identity profile] gds.livejournal.com - Date: 2012-04-22 03:14 pm (UTC) - Expand

(no subject)

From: [identity profile] gds.livejournal.com - Date: 2012-04-22 03:15 pm (UTC) - Expand

(no subject)

From: [identity profile] blacklion.livejournal.com - Date: 2012-04-22 03:15 pm (UTC) - Expand

(no subject)

From: [identity profile] avnik.livejournal.com - Date: 2012-04-22 04:07 pm (UTC) - Expand

(no subject)

From: [personal profile] abbra - Date: 2012-04-22 04:43 pm (UTC) - Expand

(no subject)

From: [identity profile] avnik.livejournal.com - Date: 2012-04-22 05:13 pm (UTC) - Expand

(no subject)

From: [personal profile] abbra - Date: 2012-04-22 07:11 pm (UTC) - Expand

Date: 2012-04-22 04:42 pm (UTC)
From: [identity profile] w00dy.livejournal.com
strsep и strtok разруливают ситуацию с экранированием? Нет? Тогда в печку их.

(no subject)

From: [identity profile] blacklion.livejournal.com - Date: 2012-04-22 04:44 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-04-22 04:51 pm (UTC) - Expand

(no subject)

From: [identity profile] blacklion.livejournal.com - Date: 2012-04-22 05:24 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2012-04-22 07:42 pm (UTC) - Expand

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2012-04-22 05:28 pm (UTC) - Expand

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2012-04-22 04:58 pm (UTC) - Expand

(no subject)

From: [identity profile] blacklion.livejournal.com - Date: 2012-04-22 05:24 pm (UTC) - Expand

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2012-04-22 05:27 pm (UTC) - Expand

Date: 2012-04-22 03:26 pm (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
use pcre, luck!

(no subject)

From: [identity profile] fas-tm.livejournal.com - Date: 2012-04-22 03:56 pm (UTC) - Expand

Date: 2012-04-22 07:45 pm (UTC)
From: [identity profile] inhate.livejournal.com
Еще блин один...

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

Вышеприведенную цитату надо калёны железом на жопах студентов профильных факультетов выжигать.

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2012-04-22 07:54 pm (UTC) - Expand

Date: 2012-04-22 08:59 pm (UTC)
From: [identity profile] slonik-v-domene.livejournal.com
Ваша идея - говно.

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2012-04-22 09:20 pm (UTC) - Expand

(no subject)

From: [identity profile] slonik-v-domene.livejournal.com - Date: 2012-04-22 09:40 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2012-04-22 09:51 pm (UTC) - Expand

(no subject)

From: [identity profile] slonik-v-domene.livejournal.com - Date: 2012-04-22 10:00 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2012-04-22 10:09 pm (UTC) - Expand

(no subject)

From: [identity profile] slonik-v-domene.livejournal.com - Date: 2012-04-22 10:37 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2012-04-22 10:41 pm (UTC) - Expand

(no subject)

From: [identity profile] plumqqz.livejournal.com - Date: 2012-04-23 07:42 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2012-04-23 08:32 am (UTC) - Expand

(no subject)

From: [identity profile] plumqqz.livejournal.com - Date: 2012-04-23 08:36 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2012-04-23 08:43 am (UTC) - Expand

(no subject)

From: [identity profile] plumqqz.livejournal.com - Date: 2012-04-23 08:44 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2012-04-23 08:47 am (UTC) - Expand

(no subject)

From: [identity profile] plumqqz.livejournal.com - Date: 2012-04-23 08:49 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_slw/ - Date: 2012-04-23 09:01 am (UTC) - Expand

(no subject)

From: [identity profile] berezovsky.livejournal.com - Date: 2012-04-23 06:41 pm (UTC) - Expand

Date: 2012-04-22 03:40 pm (UTC)
From: [identity profile] artureg.livejournal.com
а split в этой дремучести не определён?

Date: 2012-04-22 03:47 pm (UTC)
From: [identity profile] fas-tm.livejournal.com
в С нет строк как таковых. есть последовательность символов.

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-04-22 03:51 pm (UTC) - Expand

(no subject)

From: [identity profile] sorhed.livejournal.com - Date: 2012-04-22 04:14 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-04-22 06:16 pm (UTC) - Expand

Date: 2012-04-22 03:52 pm (UTC)
From: [identity profile] theiced.livejournal.com
сплит? ты дурак?

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-04-22 06:10 pm (UTC) - Expand

Date: 2012-04-22 03:58 pm (UTC)
From: [identity profile] metaclass.livejournal.com
А возвращать он что будет?:)

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2012-04-22 04:18 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-04-22 04:35 pm (UTC) - Expand

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2012-04-22 04:47 pm (UTC) - Expand

(no subject)

From: [identity profile] slonik-v-domene.livejournal.com - Date: 2012-04-22 09:11 pm (UTC) - Expand

(no subject)

From: [identity profile] lionet.livejournal.com - Date: 2012-04-22 09:27 pm (UTC) - Expand

(no subject)

From: [identity profile] sorhed.livejournal.com - Date: 2012-04-22 04:18 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-04-22 06:11 pm (UTC) - Expand

Date: 2012-04-22 04:37 pm (UTC)
From: [identity profile] smalgin.livejournal.com
Как уже предложили выше (lionet), используйте готовую библиотеку строк. Чем раньше вы начнете ее использовать, тем меньше времени потратите на переписывание потом.

Если вам нужно просто разобрать CSV, то и для разбора оного есть готовые библиотеки с хорошей историей.

В строках можно даже с добрыми намерениями нагородить 'one off' и buffer overruns (как вы показательно его вставили в первой же функции сверху)

Еще стандартный совет из сети - не использовать арифметику указателей без сильной нужды. operator[] and indexes do the same job just fine.

Будет весело, гарантирую.

Date: 2012-04-22 04:41 pm (UTC)
From: [identity profile] metaclass.livejournal.com
А где там overrun?

(no subject)

From: [identity profile] smalgin.livejournal.com - Date: 2012-04-22 04:58 pm (UTC) - Expand

Date: 2012-04-22 04:42 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Холерный вибрион, я ж не проверяю в цикле выход за пределы буфера.

(no subject)

From: [identity profile] smalgin.livejournal.com - Date: 2012-04-22 05:31 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-04-22 05:46 pm (UTC) - Expand

(no subject)

From: [identity profile] smalgin.livejournal.com - Date: 2012-04-22 05:58 pm (UTC) - Expand

Date: 2012-04-22 05:38 pm (UTC)
From: [identity profile] blackyblack.livejournal.com
1. В коде косяки - работать не будет.
2. В идеале стоило бы разбить код на две функции: поиск символа в строке и разбиение строки по номеру символа.
3. \r в результате за ошибку не считаем. Откуда нам знать, что она тебе не нужна :)

В итоге, ждём исправленную версию.

Date: 2012-04-22 05:47 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Проблема в том, что работало. Пока я не стал использовать ее вывод для дальнейшего парсинга, и то при этом в первую очередь сломалось на \r в последней строке.

А зачем разбивать на две строки, по моему так понятнее?

(no subject)

From: [identity profile] blackyblack.livejournal.com - Date: 2012-04-22 05:52 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-04-22 05:58 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-04-22 06:17 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-04-22 06:22 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-04-22 06:23 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-04-22 06:31 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-04-22 06:33 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-04-22 06:41 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-04-22 06:43 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-04-22 06:52 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-04-22 07:29 pm (UTC) - Expand

(no subject)

From: [identity profile] berezovsky.livejournal.com - Date: 2012-04-22 07:41 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-04-22 07:42 pm (UTC) - Expand

Date: 2012-04-22 08:23 pm (UTC)
From: [identity profile] plumqqz.livejournal.com
Интересно даже (я комментарии не читал пока), сколько раз предложили strtok_r?

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-04-22 08:38 pm (UTC) - Expand

(no subject)

From: [identity profile] plumqqz.livejournal.com - Date: 2012-04-22 08:40 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-04-22 08:45 pm (UTC) - Expand

(no subject)

From: [identity profile] plumqqz.livejournal.com - Date: 2012-04-22 08:47 pm (UTC) - Expand

(no subject)

From: [identity profile] jdevelop.livejournal.com - Date: 2012-04-23 11:46 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-04-23 11:52 am (UTC) - Expand

(no subject)

From: [identity profile] jdevelop.livejournal.com - Date: 2012-04-23 11:55 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-04-23 12:11 pm (UTC) - Expand

(no subject)

From: [identity profile] jdevelop.livejournal.com - Date: 2012-04-23 12:14 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-04-23 12:22 pm (UTC) - Expand

(no subject)

From: [identity profile] jdevelop.livejournal.com - Date: 2012-04-23 12:25 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-04-23 12:31 pm (UTC) - Expand

(no subject)

From: [identity profile] plumqqz.livejournal.com - Date: 2012-04-23 12:11 pm (UTC) - Expand

(no subject)

From: [identity profile] jdevelop.livejournal.com - Date: 2012-04-23 12:15 pm (UTC) - Expand

Date: 2012-04-22 08:39 pm (UTC)
From: [identity profile] slonik-v-domene.livejournal.com
strtok_r здесь излишен

(no subject)

From: [identity profile] plumqqz.livejournal.com - Date: 2012-04-22 08:42 pm (UTC) - Expand

(no subject)

From: [identity profile] slonik-v-domene.livejournal.com - Date: 2012-04-22 09:13 pm (UTC) - Expand

(no subject)

From: [identity profile] plumqqz.livejournal.com - Date: 2012-04-22 09:18 pm (UTC) - Expand

Date: 2012-04-22 08:35 pm (UTC)
From: [identity profile] slonik-v-domene.livejournal.com
Код кривой, аффтара - отлучить от C и перевести в программисты PHP.

Date: 2012-04-22 08:39 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Не, не, мы уж как нибудь на clojure да F#, с PHP связываться не желаю.

(no subject)

From: [identity profile] slonik-v-domene.livejournal.com - Date: 2012-04-22 08:42 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-04-22 08:46 pm (UTC) - Expand

(no subject)

From: [identity profile] slonik-v-domene.livejournal.com - Date: 2012-04-22 09:02 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-04-22 09:12 pm (UTC) - Expand

(no subject)

From: [identity profile] slonik-v-domene.livejournal.com - Date: 2012-04-22 09:29 pm (UTC) - Expand

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

#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";
    }
}

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

(no subject)

From: [identity profile] berezovsky.livejournal.com - Date: 2012-04-23 06:51 am (UTC) - Expand

(no subject)

From: [identity profile] nicka-startcev.livejournal.com - Date: 2012-04-23 08:54 am (UTC) - Expand

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 26th, 2025 07:33 am
Powered by Dreamwidth Studios