LINUX.ORG.RU

perl, cp1251, utf8


0

0

пишу парсирование xls->mysql 
есть строка гарантия товара вида 2 месяца, 3 года, или пустая строчка - нет гарантии 

sub NormalizateGuarantee
{
  
  my $guar = shift;
  my $value = '';
  
  # убираем пробелы 
  $guar =~ s/\s//g;
  $guar =~ s/-//g;

  # пустая строка - выходим
  return 0 if($guar qw "");
  
  for($i = 0; $i < length($guar); $i++)
  {
    if(substr($guar, $i, 1) eq 'г' || 
        substr($guar, $i, 1) eq 'л')
    {
        $value *= 12; 
    }
    else
    {
        $value .= substr($guar, $i, 1);
    }  
 
  }
  
  
  return $value;
  
}

но тут возникает вопрос как избавиться от зависимости кодировки ввода русских букв в коде т.е. г,л ?
почему спрашиваю - просто не уверен что на сервере заработает
да согласен всегда можно залезть и исправить
просто хочу узнать правельное решение ))

псб . )

небольшое дополнение 
 # пустая строка - выходим
  return 0 if $guar eq "";

;)

hose
() автор топика

Как-то сталкивался с аналогичной проблемой. Нашёл, что тупо проверять hex-коды, а не символы, надёжнее всего.

anonymous_incognito ★★★★★
()
Ответ на: комментарий от anonymous_incognito

если вопрос еще кому-то актуален то вот решение

sub NormalizateGuarantee
{
  
  my $guar = shift;
  my $value = '';
  
  $guar =~ s/\s//g;
  $guar =~ s/-//g;

  return 0 if $guar eq "";
  
  for($i = 0; $i < length($guar); $i++)
  {
    return ( $value *= 12 ) if( sprintf("%04X", ord(substr($guar, $i, 1))) eq '0433' || 
        sprintf("%04X", ord(substr($guar, $i, 1))) eq '043B' );
        
    $value .= substr($guar, $i, 1);
  }
  
  return $value;
  
}

коды '043B', '0433' равны sprintf("%04X", ord('г')), sprintf("%04X", ord('л'));

а перл удобный язык, только немножко сложный :( :))    

hose
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.