Xpoint
   [напомнить пароль]

Баг при разборе значений строк из .csv файла, значения: 1 561,73 различаются кодом

Метки: [без меток]
2007-07-26 14:40:06 [обр] Vitaly[досье]

Всем привет!
Так получается, что при разборе .csv файла, все данные перегоняю в массив, для удобства работы с ними,
значения поля хранятся в формате 1 132 425 638,56 они форматируются экселем, просто так нужно, для удобства работы с данными, всё же значения вида 1 132 425 638,56 читаются лучше чем 1132425638,56... когда я начинаю приобразовывать формат значений
из 1 132 425 638,56 => 1132425638,56 делаю это так:

foreach($this->data as $key => $value) {
    $value = str_replace(' ', '', $value);
    $value = str_replace(',', '.', $value);
    $yData[] = floatval($value); // из строки делаю float
}

В списке хранятся значения одного формата типа 1 132 425 638,56 ; 12 536 475 838,43...
одни значения функция str_replace(' ', '', $value) парсит правильно, а другие оставляет в исходном представлении, предполагаю что код символа пробела - разный в этих значениях, а когда преобразую во float, эти "проблемные" значения превращаются в 0 или возвращается первая часть значения до разделителя, в моём случае 1 или 12, даже и не думал что так может получиться..
потомучто при моих стандартных настройках Denver(a) всё работает исключительно, а когда заливаю на сервер хостмастера, вылазят
такие баги..

Ребят, может кто-то с этой проблемой уже сталкивался?
помогите пожалуйста

спустя 1 час 3 минуты [обр] Алексей Севрюков(162/1280)[досье]
Можеть быть производить замену регулярным выражением /\s+/? А еще лучше наверно /[^\d,]+/. Заменять естественно на пустоту.
спустя 11 минут [обр] Валера(6/24)[досье]
Алексей меня опередил (про замены регулярными выражениями) а еще проверьте полученный массив, может в нем что не так.
спустя 18 минут [обр] Vitaly[досье]

так уже пробовал:
$value = preg_replace('/\s+/is', '', $value); // не помогает, пропускает пробелы в некоторых значениях
а при преобразовании типа floatval($value), возвращает "0", для этих "загадочных" значений, данные хранятся в .csv, считал что все они в одной
и той же кодировке, например, если в экселе задать для каждого поля определённый формат, а числовые значения набрать на разных языках, не значит же это что код симолов будет у них разный?

Алекскей, "/[^\d,]+/" - мудрое решение, сейчас я попробую.., локально у меня и то и другое работает.., только вот на сервере хостмастера к сожалению всё не так как надо, в чём же дело, в настройке PHP или Apache и в каких именно?

значения полученные из файла, сохраняю в массиве, массив - просто "носитель, промежуточное звено", видимо в файле значения разной кодировки..., хотя не знаю, уже запутался...

спустя 52 минуты [обр] Vitaly[досье]
к сожалению, доступа к серверу пока нет, чтобы проверить, будет только вечером, буду надеяться, что "/[^\d,]+/" разрешит проблему,
Всем большое спасибо за помощь!!!
спустя 4 часа 45 минут [обр] Привидение+(611/795)[досье]
код символа можно посмотреть с помощью функции chr()
и не гадать на кофейной гуще
спустя 59 минут [обр] Vitaly[досье]
Роман Шевченко - Вы правы, я уже от расстройства думал об анализе каждого символа в значении, это было бы ударом по производительности,
к счастью совет Алексея Севрюкова решил эту проблему, Алексей, спасибо Вам огромное!:) Как только увидел Вашу идею: "/[^\d,]+/" - сразу поверил что это сработает, $value = preg_replace('/[^\d,]+/', '', $value); // заменить все символы кроме чисел и запятой на '', в точку, это решило проблему.
Ребята, всем большое спасибо за помощь, за советы!
Powered by POEM™ Engine Copyright © 2002-2005