Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Вопрос по функции SPLIT и символу разделителя


Автор: itrex111 29.11.2012, 14:34
Добрый день!

Возникла следующая проблема

имеется строка:
(названия элементов строки динамически меняются)

яблоко,груша,дыня,синяя слива,жёлтая слива,

мне нужно эти данные занести в массив
я делаю
Код

#! /usr/bin/perl
$str = 'яблоко,груша,дыня,синяя слива,жёлтая слива';
#----- Разбиваем на элементы по запятой --------
@name = split(/\,/,$str);
 
foreach $n (@name){
  print "$n\n";
}

Всё работает нормально, но как только в названии элемента встречается запятая
например если: 
Код

  $str = 'яблоко,груша,дыня,синяя слива,жёлтая слива,малина, которая не упаков., ';

такая структура массива ломается и парсер не работает

Подскажите пожалуйста как побороть такую проблему?

p/s (мне нужно парсить только по запятым)

Автор: arto 29.11.2012, 14:52
",(?!\\s)" ?

Автор: itrex111 29.11.2012, 15:00
Цитата(arto @ 29.11.2012,  14:52)
",(?!\\s)" ?

Ваше рег. интерпретируется как

найти запятую за которой нет пустого символа??

Я правильно понял???

Автор: itrex111 29.11.2012, 18:39
Цитата(arto @ 29.11.2012,  14:52)
",(?!\\s)" ?

Большое спасибо!!!
Немного подправил  

/,(?!\s[\w])/

и резко наступило счастье!

Автор: arto 29.11.2012, 18:41
# perl -CSA -le 'print join "\n", split ",(?!\\s)", $ARGV[0]' 'яблоко,груша,дыня,синяя слива,жёлтая слива,малина, которая не упаков., '
яблоко
груша
дыня
синяя слива
жёлтая слива
малина, которая не упаков., 
#

Добавлено через 1 минуту и 27 секунд
а зачем скобки класса?

Автор: itrex111 30.11.2012, 00:34
Цитата(arto @ 29.11.2012,  18:41)
# perl -CSA -le 'print join "\n", split ",(?!\\s)", $ARGV[0]' 'яблоко,груша,дыня,синяя слива,жёлтая слива,малина, которая не упаков., '
яблоко
груша
дыня
синяя слива
жёлтая слива
малина, которая не упаков., 
#

Добавлено @ 18:43
а зачем скобки класса?

В строке   'яблоко,груша,дыня,синяя слива,жёлтая слива,малина, которая не упаков., '

встретилось такая позиция 'яблоко,груша,дыня,синяя слива,жёлтая слива,малина, которая не упаков., (Овощи),'
Пришлось добавить \w на один алфавитно цифровой символ
Честно говоря я ещё не знаю точно какая конструкция встретится в строке нужно около недели понаблюдать.

Автор: krypt3r 14.1.2013, 11:02
CSV уже не в почёте?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)