[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проблема с fgetcsv
Константин
Здравствуйте! Помогите, пожалуйста, пока не очень разбираюсь в PHP.

Есть файл в формате csv, нужно выдать его в таблице на сайте.

<?php
error_reporting( E_ALL & E_STRICT );
$f = fopen("http://rulevoi.net/content/zashita/alfeco.csv", "r") or die("Ошибка!");
for ($i=0; $data=fgetcsv($f,1000,";"); $i++) {
$num = count($data);

print "<tr>";
for ($c=0; $c<$num; $c++)
{
//if ($i==0) {print "<th align = "center"> <b> $data[$c] </b> </th>";}

//if ($data[2]==' ') print " <td collspan="2" align="center"> <b> $data[1] </b> </td>";
//else

print "<td> $data[$c] </td>";
}

print "</tr>";
}
fclose($f);
?>



Если не использовать закоментированные строчки, то таблица выдаётся нормально (но не так как хочется результат).
Если убираю комментарий из любой строчки, вылазит ошибка Parse error: syntax error, unexpected T_STRING in /home/cp945785/public_html/content/zashita/test.php on line 28

Первой закоментированной строчкой я хочу выделить заголовок в таблице.
Вторая строчка используется для "подзаголовок", например, есть таблица

Наименование; Цена
Audi;
Audi 80; 1500 руб.

хочу, чтобы надпись Audi была по центру (объединяю две ячейки). Я понял, что в формате csv если у меня ячейка пустая, то там будет ";;", а в скрипте наверно надо указать
 if ($data[2]==' ')


Подскажите, как проще можно это реализовать или в чём ошибка.
Заранее спасибо rolleyes.gif



Спустя 9 минут, 15 секунд (26.03.2010 - 21:52) Winston написал(а):
на 27 строчке нету ;

Сделай так
print "<td>.$data[$c].</td>";

Спустя 13 минут, 19 секунд (26.03.2010 - 22:05) Константин написал(а):
Цитата (PHPprogramer @ 26.03.2010 - 18:52)
на 27 строчке нету ;

Сделай так
print "<td>.$data[$c].</td>";

не нашёл, где нет ; blink.gif

сделал, только не помогло. sad.gif

Спустя 7 минут, 33 секунды (26.03.2010 - 22:13) Winston написал(а):
Так попробуй:
print "<td>".$data[$c]."</td>";

Спустя 9 часов, 23 минуты, 57 секунд (27.03.2010 - 07:37) ZigZag написал(а):
Попробуй так:
error_reporting( E_ALL & E_STRICT );
$f = fopen("http://rulevoi.net/content/zashita/alfeco.csv", "r") or die("Ошибка!");
for ($i = 0; $data = fgetcsv($f,1000,";"); $i++) {
$num = count($data);

echo ($i == 0 ? '<tr>' : '<tr style="background-color: #CCCCCC" align="center">');

for ($c = 0; $c < $num; $c++)
{
if (trim($data[2]) == '')
{
echo '<td collspan="2" align="center"> <b>'. $data[1] .'</b> </td>';
break;
}
else echo '<td> ' . $data[$c] . '</td>';
}

echo '</tr>';
}
fclose($f);

Спустя 26 минут, 46 секунд (27.03.2010 - 08:04) Константин написал(а):
Цитата (ZigZag @ 27.03.2010 - 04:37)
Попробуй так:
error_reporting( E_ALL & E_STRICT );
$f = fopen("http://rulevoi.net/content/zashita/alfeco.csv", "r") or die("Ошибка!");
for ($i = 0; $data = fgetcsv($f,1000,";"); $i++) {
$num = count($data);

echo ($i == 0 ? '<tr>' : '<tr style="background-color: #CCCCCC" align="center">');

for ($c = 0; $c < $num; $c++)
{
if (trim($data[2]) == '')
{
echo '<td collspan="2" align="center"> <b>'. $data[1] .'</b> </td>';
break;
}
else echo '<td> ' . $data[$c] . '</td>';
}

echo '</tr>';
}
fclose($f);

ZigZag, спасибо, понял что в html в php надо использовать одинарные кавычки. Но вот этот скрипт мне выдал жирным шрифтом только цены.

Попытаюсь ещё раз объяснить, что я хочу сделать. Мне надо получить подобную таблицу (делал её вручную) таблица из подобного файла. (файл уже сохранён в UTF-8, так что Excel не поймёт кирилиццу).

Извиняюсь, если уже достал вас unsure.gif

Спустя 9 минут, 21 секунда (27.03.2010 - 08:13) Константин написал(а):
Нашёл в интернете так называемый универсальный парсер csv, код ниже. Написано, что выводит данные из csv файла в двумерный массив $values. Подскажите, есть ли смысл его использовать, сам не очень разобрался.

<?php
$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);

?>

Спустя 7 минут, 35 секунд (27.03.2010 - 08:21) ZigZag написал(а):
Вот так попробуй
$row = 1;
echo '<table>';
if (($handle = fopen('alfeco.csv', 'r')) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
$num = count($data);

echo ($row != 1 ? '<tr>' : '<tr style="background-color: #CCCCCC" align="center">');

for ($c = 0; $c < $num; $c++) {
if (trim($data[1]) == '')
{
echo '<td style="background-color: #DDDDDD" colspan="2" align="center"> <b>'. $data[0] .'</b> </td>';
break;
}
else echo '<td> ' . ($row == 1 ? '<b>' . $data[$c] . '</b>' : $data[$c]) . '</td>';
}

$row++;
}
fclose($handle);
}
echo '</table>';

Спустя 3 минуты, 16 секунд (27.03.2010 - 08:24) Константин написал(а):
ZigZag, спасибо большое, всё работает. rolleyes.gif

Спустя 5 часов, 45 минут, 55 секунд (27.03.2010 - 14:10) Константин написал(а):
Только что заметил проблему с кириллицей. Почему то excel ставит
" 
перед некоторыми наименованиями. То есть у меня написано в прайсе: защита картера Audi, а выдаётся в таблице просто Audi. Неудобств это не доставляет, но хочется понять почему так. Перед фразами где стоит " русские буквы выводятся ( а после английских слов кирилицца выводится всегда. Пробывал вставить перед всеми позиями двойные кавычки, действительно выводятся русские буквы, но получаются у некоторых позий дополнительный ячейки. В чём может быть дело???

Спустя 1 день, 1 час, 13 минут, 15 секунд (28.03.2010 - 14:23) Константин написал(а):
разобрался с нормальным выводом русских слов. Excel ( у меня стоит версии 2003) не всегда выделяет слова двойной кавычкой (а должен, так как это текст). Пробывал вставить в начале каждой строчки двойную кавычку, но в итоге иногда получались лишние ячейки. Проще всего сохранять в csv в open office, к тому же там можно выбрать тип разделителя и кодировку.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.