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


Автор: PyccHeBa 20.11.2007, 10:52
Привет!
Нужно посчитать сколько чисел, разделенных запятыми содержит строка.  Можно просто посчитать количество запятых и проверить нет ли подряд идущих запятых, или запятых через пробел(ы)


Как это лучше сделать?

Автор: amg 20.11.2007, 11:18
Цитата(PyccHeBa @  20.11.2007,  10:52 Найти цитируемый пост)
посчитать сколько чисел, разделенных запятыми содержит строка
Немного непонятно. Если не пойдет, уточните вопрос.
Код

$count++ while $str =~ /(?:^|(?<=[\s,]))\d+(?:(?=[\s,])|$)/g;

Автор: GoodBoy 20.11.2007, 17:52
Код
$qwe = '1232,4556,456,23345,gys,gggg,345234,gege';
@qwe = $qwe =~ /\d+(,|$)/g;
print scalar @qwe;

результат - 5

Код
$qwe = '1232,4556,456,23345,gys,gggg,345234,gege,123';
@qwe = $qwe =~ /\d+(,|$)/g;
print scalar @qwe;

результат - 6

Автор: PyccHeBa 24.11.2007, 21:35
Супер!!!! Так коротко и просто! smile

Автор: vadiml 25.11.2007, 20:35
можно проще:
$str -- твоя стока
my $count = ($str =~ tr/,/,/); # это кол-во запятых
my $count = scalar(split /,/, $str); # это кол-во строк разделённых запятыми
my @strings = split /,/, $str; # это массив строк, что были разделены запятыми

Автор: PyccHeBa 27.11.2007, 05:33
$qwe = '1232,4556,456,23345,gys,gggg,345234,gege';
@qwe = $qwe =~ /\d+(,|$)/g;
print scalar @qwe;

хороший метод, но почемуто есть сбои
например 

$qwe ='"2007-02-19 15:15:00",4900,0,536.9,1.857,"NAN",14.36,0,0';
@qwe = $qwe =~ /\d+(,|$)/g;
print scalar @qwe;

выдает 7. Все отлично,

Но у меня в программе выдает стабильно 6
Скрипт примерно такой

while(<MYINPUTFILE>) {
      my($line) = $_;
 chomp($line);
  @qwe = $line =~ /\d+(,|$)/g;
}

Почему так

Автор: amg 27.11.2007, 12:17
Проверь, не заканчивается ли строка пробелом.


А данных типа
$qwe = '"Модераторы: korob2001, sharq",korob2001';
не может быть? (Результат 2).

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