Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
[php] нужен скрипт создания/отображения таблицы |

09.07.2007, 21:58
|
|
Постоянный
Регистрация: 06.12.2006
Сообщений: 762
Провел на форуме: 5352530
Репутация:
2062
|
|
[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 |
Ширина колонки должна выстраиваться по самому длинному значению. Когда-то видел подобные скрипты и даже проги, но не сохранил
Под рукой нет ни мануалов, ни нормального инета, так что желательно подробные примеры давайте если не полностью скрипт
ЗЫ знаю что самому мона проставить горизонтальные разделители и пробелы наставлять в ячейках чтоб они все имели одинаковую ширину, но харит меня это дело
Последний раз редактировалось Thanat0z; 09.07.2007 в 22:00..
|
|
|

09.07.2007, 23:24
|
|
Познающий
Регистрация: 21.05.2007
Сообщений: 61
Провел на форуме: 79888
Репутация:
145
|
|
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 = ' ';
}
echo "
<td>
$column
</td>
";
}
echo "
</tr>
";
}
echo "
</table>
";
?>
|
|
|

10.07.2007, 22:34
|
|
Постоянный
Регистрация: 06.12.2006
Сообщений: 762
Провел на форуме: 5352530
Репутация:
2062
|
|
Нет, совсем не то, говорю же что надо в текстовом формате, пример привел
|
|
|

11.07.2007, 00:12
|
|
Участник форума
Регистрация: 22.05.2007
Сообщений: 144
Провел на форуме: 306311
Репутация:
119
|
|
Мда, чтобы без таблиц (<tr><td>...</td></tr>) такой скрипт сделать нужно пару часиков голову поломать. ИМХО, нужно разбивать весь файл построчно в массив как делал hhover, затем каждые элементы строчки разделенные | перенести в отдельные массивы, найти в этих массивах самые длинные элементы(сравнивая значения длины каждого элемента массива полученных через функцию strlen), узнать их длину, потом посчитать сколько символов не хватает остальным элементам этого массива до нужной длины и добавить к ним нужное количество пробелов, и потом наконец вывести это все на экран. Тут циклов до ж**ы получится, темболее что входной текстовый файл наверняка не маленький.
И потом, код который писал hhover делает тоже самое, только немного в другом виде.
|
|
|

11.07.2007, 02:16
|
|
Познающий
Регистрация: 21.05.2007
Сообщений: 61
Провел на форуме: 79888
Репутация:
145
|
|
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>
";
?>
|
|
|

11.07.2007, 17:23
|
|
Познающий
Регистрация: 21.05.2007
Сообщений: 61
Провел на форуме: 79888
Репутация:
145
|
|
Пример файла:
Код:
N |Название | скорость | Процент
1 |alpha | 700 | 23
2 |beta | 2000 | 65
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|