|
|
|
| Это опять я.
Скачал я парсер с вашего форума, вроде работает.
Но как мне разбить все данные в разные массивы, допустим у меня есть два столбца, в одном текст про авто, в другом про самолеты.
Чтобы можно было выводить данные так $avto["avto1"]; $plane["plane1"];
Код парсера такой.
<?php
$file = $_POST['file'];
$csv_lines = file("1.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);
?>
|
| |
|
|
|
|
|
|
|
для: andrey_94
(26.08.2009 в 22:46)
| | В пхп есть встроенный парсер csv, думаю он будет более производителен | |
|
|
|
|
|
|
|
для: nikita2206
(26.08.2009 в 22:53)
| | Сделал так..... но возникает тот же вопрос.
Нужно чтобы каждое поле соответствовало определенной переменной, как можно так сделать?
Вот код.
<?php
$row = 1;
$handle = fopen ("1.csv","r");
while ($data = fgetcsv ($handle, 1000, ","))
{
$num = count ($data);
print "<p>строка $row:</p>";
$row++;
for ($c=0; $c < $num; $c++)
{
print $data[$c] ."<br>";
}
}
fclose ($handle);
?>
|
| |
|
|
|
|
|
|
|
для: andrey_94
(26.08.2009 в 23:07)
| | Что такое поле? Правда не знаю что это) знаю строка столбик ячейка а поле не знаю | |
|
|
|
|
|
|
|
для: nikita2206
(26.08.2009 в 23:11)
| | Ну, в экеселе есть строка, и она разделена на части, вот эти самые части и есть поля | |
|
|
|
|
|
|
|
для: andrey_94
(26.08.2009 в 23:14)
| | Поле это тоже самое что и ячейка | |
|
|
|
|
|
|
|
для: nikita2206
(26.08.2009 в 23:11)
| | Ячейка это поле ))) один смысл | |
|
|
|