|
|
|
| Есть некий CSV парсер )
<?php
error_reporting(E_ALL ^ E_NOTICE);
$file = $_POST['file'];
$csv_lines = file("book1.csv");
if(is_array($csv_lines))
{
//разбор csv
$cnt = count($csv_lines);
for($i = 0; $i < $cnt; $i++)
{
$line = $csv_lines[$i];
$line = trim($line);
//указатель на то, что через цикл проходит первый символ столбца
$first_char = true;
//номер столбца
$col_num = 0;
$length = strlen($line);
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;
}
}
}
var_dump($values);
?>
|
Но данные выводить в формате
">2>: 1’K’я 03>"
Как исправить текущую проблему? ЗАранее спасибо | |
|
|
|
|
|
|
|
для: Ats
(26.02.2009 в 08:30)
| | А не проще ли fgetcsv() ? | |
|
|
|
|
|
|
|
для: sim5
(26.02.2009 в 08:40)
| | Да там тоже с кодировкой беда.Да и мне без него поудобнее и привычнее) | |
|
|
|
|
|
|
|
для: Ats
(26.02.2009 в 08:55)
| | Применение этой функции намного проще. Впрочем дело ваше. А вот кодировка, так это ни как не связано с функцией как таковой, а с проблемами вывода - файл имеет кодировку например utf, а вы работаете как с 1251, или наоборот. Вот разберитесь в какой кодировке ваши исходные файлы, решите проблему свою. | |
|
|
|
|
|
|
|
для: sim5
(26.02.2009 в 09:00)
| | А как изменить вывод кодировки? | |
|
|
|
|
|
|
|
для: Ats
(26.02.2009 в 09:02)
| | Передавая соответсвующий заголовок, либо укзаывать соответствующую в метатеге. Но... Если вы знаете, что ваш csv-файл, например, в кодировке utf-8, а весь сайт работает с кодировкой 1251, то не зачем переводить из-за одного файла кодировку всего сайта, достаточно воспользоваться функцией iconv() и преобразовать csv-файл в кодировку 1251 при его разборе/записи/выводе. Что у вас за кодировка, я не знаю, повторяю, разбиритесь что у вас в чем - решите проблему. | |
|
|
|