Доброе время суток!
Возникла вот такая проблема,
скачал готовый парсер csv-файлов и всё вроде было хорошо, локально под denwer'ом отрабатывает как надо. Но вот закинул на хост и... беда.
В csv есть 8 колонок и в каждом ряду на 4-ой, 5-ой, 6-ой (чаще всего 5-ая и 6-ая) парсер решает, что строка окончена и отсекает всё что идёт дальше (к следующему ряду). Причём в этих ячейках нет ";" из всех знаков припенания там может встречаться только точка и дефис. Да и самое интересное, что иногда это случается посреди слова (Пример: в ячейке находится "шт.", в массив попадает только "ш", а остальное исчезает. Или в ячейке "Livia", а в массиве "Liv").
Словом вопрос в том, куда смотреть, чтобы решить этот вопрос, так как даже идей нет почему такая странная (и разнная) работа скрипта.
Ну, и сам парсер: (Отобразить)
PHP:
скопировать код в буфер обмена
function csv_parser($file)
{
$csv_lines = file('csv/' . $file); {
//разбор csv
$cnt = count($csv_lines); for($i = 0; $i < $cnt; $i++)
{
$line = $csv_lines[$i];
//указатель на то, что через цикл проходит первый символ столбца
$first_char = true;
//номер столбца
$col_num = 0;
for($b = 0; $b < $length; $b++)
{
//переменная $skip_char определяет обрабатывать ли данный символ
if($skip_char != true)
{
//определяет обрабатывать/не обрабатывать строку
///print $line[$b];
$process = true;
//определяем маркер окончания столбца по первому символу
if($first_char == true)
{
if($line[$b] == '"')
{
$terminator = '";';
$process = false;
}
else
$terminator = ';';
$first_char = false;
}
//просматриваем парные кавычки, опредляем их природу
if($line[$b] == '"')
{
$next_char = $line[$b + 1];
//удвоенные кавычки
if($next_char == '"')
$skip_char = true;
//маркер конца столбца
elseif($next_char == ';')
{
if($terminator == '";')
{
$first_char = true;
$process = false;
$skip_char = true;
}
}
}
//определяем природу точки с запятой
if($process == true)
{
if($line[$b] == ';')
{
if($terminator == ';')
{
$first_char = true;
$process = false;
}
}
}
if($process == true)
$column .= $line[$b];
if($b == ($length - 1))
{
$first_char = true;
}
if($first_char == true)
{
$values[$i][$col_num] = $column;
$column = '';
$col_num++;
}
}
else
$skip_char = false;
}
}
}
return $values;
}