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
Как предлагаешь парсить потенциальный гигабайт?

Date: 2012-04-22 03:14 pm (UTC)
From: [identity profile] gds.livejournal.com
итератами, чо.

Date: 2012-04-22 03:15 pm (UTC)
From: [identity profile] gds.livejournal.com
ну да, и не через strхуйню.

Date: 2012-04-22 03:15 pm (UTC)
From: [identity profile] blacklion.livejournal.com
mmap()? :)
Решение топикстартера тоже особо на подкачку не рассчитано

Date: 2012-04-22 04:07 pm (UTC)
From: [identity profile] avnik.livejournal.com
Кстати -- а куда бы посмотреть на предмет "загрузить большой файл с radix tree mmap'ом и поискать там чего"? (не в плане супер-реализации, а скорее чего попроще, чтобы понять как такое работает)

Date: 2012-04-22 04:43 pm (UTC)
abbra: (Default)
From: [personal profile] abbra
Knuth, Donald. E. [1998]. The Art of Computer Programming, Volume 3, Sorting and Searching. Addison-Wesley, Reading, Massachusetts.

Date: 2012-04-22 05:13 pm (UTC)
From: [identity profile] avnik.livejournal.com
Хм, а там про mmap есть? ;)

Date: 2012-04-22 07:11 pm (UTC)
abbra: (Default)
From: [personal profile] abbra
Нет :)
Однако там довольно много важных замечаний о свойствах и поведении алгоритмов в условиях различной стоимости доступа к данным и коду, по крайней мере во втором издании (2011 года).

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

Date: 2012-04-22 04:44 pm (UTC)
From: [identity profile] blacklion.livejournal.com
А этот код разруливает? Вообще, приличного кода с полной поддержкой shell words я как-то не видел ни разу.

Date: 2012-04-22 04:51 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Написать нормальный парсер CSV с экранированием это та еще задача. Можно давать на собеседовании и издеваться.

Date: 2012-04-22 07:42 pm (UTC)
From: [identity profile] http://users.livejournal.com/_slw/
use Text::CSV;
$csv = Text::CSV->new({binary => 1, sep_char => ';'});
$status = $csv->parse($_);
foreach $f ($csv->fields()){
....
}

Date: 2012-04-22 05:28 pm (UTC)
From: [identity profile] lionet.livejournal.com
На Эрланге примерно так:

extract_value([]) -> novalue;
extract_value([$\r,$\n|Rest]) -> {Rest};
extract_value([$\n|Rest]) -> {Rest};
extract_value([$"|Rest]) -> extract_quoted(Rest, []);
extract_value(Rest) -> extract_nonquoted(Rest, []).

extract_nonquoted([$\n|_]=Rest, V) -> {V, Rest};
extract_nonquoted([$\r,$\n|_]=Rest, V) -> {V, Rest};
extract_nonquoted([$,|Rest], V) -> {V, Rest};
extract_nonquoted([C|Rest], V) -> extract_nonquoted(Rest, [C|V]);
extract_nonquoted([], V) -> {V, []}.

extract_quoted([$",$,|Rest], V) -> {V, Rest};
extract_quoted([$",$\r,$\n|Rest], V) -> {V, [$\n|Rest]};
extract_quoted([$",$\n|Rest], V) -> {V, [$\n|Rest]};
extract_quoted([$",$"|Rest], V) -> extract_quoted(Rest, [$"|V]);
extract_quoted([$"], V) -> {V, []};
extract_quoted([$\r,$\n|Rest], V) -> extract_quoted(Rest, [$\n|V]);
extract_quoted([C|Rest], V) -> extract_quoted(Rest, [C|V]);
extract_quoted([], V) -> {V, []}.

Date: 2012-04-22 05:24 pm (UTC)
From: [identity profile] blacklion.livejournal.com
Смотреть надо — понимает ли он заэскейпленные кавычки в кавычках и прочее.

Date: 2012-04-22 05:27 pm (UTC)
From: [identity profile] lionet.livejournal.com
Понимает. И прочее.

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 Sep. 2nd, 2025 06:32 pm
Powered by Dreamwidth Studios