Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   [php] нужен скрипт создания/отображения таблицы (https://forum.antichat.xyz/showthread.php?t=44126)

Thanat0z 09.07.2007 21:58

[php] нужен скрипт создания/отображения таблицы
 
Нужен скрипт для "псевдографического" отображения таблиц. То есть мне нужно создать табличку типа

Код:

___________________
|  | A | B | C | D |
=====================
| 1 |  |  |  |  |
---------------------
| 2 |  |  |  |  |
---------------------
| 3 |  |  |  |  |
---------------------
| 4 |  |  |  |  |

Данные будут задаваться строками, с разделителем |

То есть если подать на вход скрипту из текстового файла
Код:

№ |Название | скорость | Процент |
1 |alpha | 700 | 23 |
2 |beta | 2000 | 65 |

то должна создаться таблица

Код:

___________________________________
| № |Название | скорость | Процент |
====================================
| 1 |alpha    | 700      | 23      |
------------------------------------
| 2 |beta    | 2000    | 65      |

Ширина колонки должна выстраиваться по самому длинному значению. Когда-то видел подобные скрипты и даже проги, но не сохранил
Под рукой нет ни мануалов, ни нормального инета, так что желательно подробные примеры давайте если не полностью скрипт

ЗЫ знаю что самому мона проставить горизонтальные разделители и пробелы наставлять в ячейках чтоб они все имели одинаковую ширину, но харит меня это дело

hhover 09.07.2007 23:24

PHP код:

<?php

$file 
file 'filename.txt' );

echo 
"
<table width='100%' heigth='100%' cellpadding='0' cellspacing='0' border='1'>
"
;

foreach ( 
$file as $string )
{
  
  
$string trim $string );
  
$string_array explode "|"$string );
  
  echo 
"
  <tr>
  "
;

  foreach ( 
$string_array as $column )
  {
    
    
$column trim $column );
    if ( 
$column == '' )
    {
      
$column '&nbsp;';
    }
    
    echo 
"
    <td>
      
$column
    </td>
    "
;
    
  }
  
  echo 
"
  </tr>
  "
;

}

echo 
"
</table>
"
;

?>


Thanat0z 10.07.2007 22:34

Нет, совсем не то, говорю же что надо в текстовом формате, пример привел

ant0ha 11.07.2007 00:12

Мда, чтобы без таблиц (<tr><td>...</td></tr>) такой скрипт сделать нужно пару часиков голову поломать. ИМХО, нужно разбивать весь файл построчно в массив как делал hhover, затем каждые элементы строчки разделенные | перенести в отдельные массивы, найти в этих массивах самые длинные элементы(сравнивая значения длины каждого элемента массива полученных через функцию strlen), узнать их длину, потом посчитать сколько символов не хватает остальным элементам этого массива до нужной длины и добавить к ним нужное количество пробелов, и потом наконец вывести это все на экран. Тут циклов до ж**ы получится, темболее что входной текстовый файл наверняка не маленький.

И потом, код который писал hhover делает тоже самое, только немного в другом виде.

hhover 11.07.2007 02:16

ant0ha,
Можно и попроще...

Thanat0z,
Не знаю насколько адекватно будет реагировать на ошибки, но в случае валидных входных данных работает исправно:
PHP код:

<?php

$main_array 
file 'filename.txt' );

foreach ( 
$main_array as $key => $row )
{

  
$row trim $row );
  
$columns explode "|"$row );

  foreach ( 
$columns as $k => $column )
  {

    
$column trim $column );
    
$table[$key][$k] = $column;

    
$strlen strlen $column );
    if ( 
$strlen $table['len'][$k] )
    {
      
$table['len'][$k] = $strlen;
    }

  }
  
}

foreach ( 
$table['len'] as $int )
{
  
$max_len += $int;
}
$max_len += count $table['len'] ) * 3;
$max_len += 1;

$row_str str_pad ''$max_len'-' );


echo 
"
<pre>
"
;

echo 
$row_str;
foreach ( 
$table as $key => $row )
{
  echo 
"\r\n";
  echo 
"|";

  foreach ( 
$row as $k => $column )
  {
    
$column str_pad $column$table['len'][$k] );
    echo 
" " $column " |";
  }

  echo 
"\r\n";
  echo 
$row_str;
}

echo 
"
</pre>
"
;

?>


hhover 11.07.2007 17:23

Пример файла:
Код:

N |Название | скорость | Процент
1 |alpha | 700 | 23
2 |beta | 2000 | 65



Время: 23:22