Преобразование таблиц Печать
Автор: А.Волос   
Глава_01
Этот небольшой скрипт на PHP делает следующую работу: преобразует таблицу
выданную сервером MySQL в таблицу для помещения ее на html-страницу.

Данный скрипт считывает таблицу SQL из текстового формата автоматически, и записывает
результат в новый файл уже в html-формате! Замечательный помощник для наборщика текстов!

Таблица, выданная в ответ на SQL-запрос выглядит в текстовом формате так,
как показано на рисунке. Различаться будут только количество столбцов и строк.

Подсказка

Но известно, что подобный текстовый формат не может отобразиться достоверно на
html-странице. Как бы мы не ухищрялись, браузер не отобразит таблицу в удобном для
восприятия виде. Так как на html-страницах для таблиц существуют специальные теги.
Но вручную переносить данные в такие таблицы - каторожный труд. Который я до поры до
времени и проделывал вручную. Это пока таких таблиц было не много. А если их сто и более?

Вышеуказанная таблица например будет выглядеть так:

Field Type Null Key Default Extra
name char(30) NO NULL
second_name char(30) YES NULL
family_name char(30) NO NULL
birth date NO NULL
address char(150) NO unknown
startdate date NO 2002-01-01
id smallint(6) NO PRI NULL auto_increment

Исходный файл, в который надо поместить SQL-таблицу называется data.txt.
Файл, в который программа помещает результат - таблицу в html-формате,
называется fileOut.txt. Еще один вспомогательный файл для вывода ошибок,
если какой-то файл для чтения или записи не откроется - error.txt.
Все файлы должны находиться в одном каталоге со скриптом.

Небольшие затруднения при написании скрипта создали глобальные переменные.
Обращение к глобальным переменным в PHP несколько отличается от С++. Отличие в деталях.
Обратите внимание на наличие в скрипте двух функций Count1() и Count2(). Первая работает
с глобальными переменными, а вторая с локальными.

PHP в силу своей специфики имеет колоссальное количество специализированных функций для
работы со строками. Программа использует две таких функции - функцию, подсчитывающую
количество вхождений подстроки в строку substr_count(), и функцию strtok(), которая
разбивает строку на подстроки, разделенные заданным по условию разделителем.


<?php
//объявим массивы
$masName = array();
$n=0;
$index = 0;

function Count1($myLine){

global $index;
$index = substr_count($myLine, '+');
return $index;
}
function Count2($myLine){
//global $index;
$index = substr_count($myLine, '+');
return $index;
}

//-----------------------------
// откроем файл для вывода ошибок
$filename = "error.txt";
if(!($errorFile = fopen($filename, "w"))) {

print("'$filename' could not be created\n");
exit;
}
//-----------------------------
// откроем файл для вывода
$filename = "fileOut.txt";
if(!($fileOut = fopen($filename, "w"))) {
fputs($errorFile, "'$filename' could not be created\n" );
exit;
}
//-----------------------------
// откроем файл для чтения
$filename = "data.txt";
if(!($myFile = fopen($filename, "r"))) {
fputs($errorFile, "'$filename' could not be opened\n" );
exit;
}
//-----------------------------

//считаем построчно из файла data.txt в файл fileOut.txt
while(!feof($myFile)) {

//читаем строку из файла
$myLine = fgets($myFile, 255);

//сосчитаем количество плюсов в строке $myLine
if( $index < 1){

$index= Count1($myLine);
}
//если строка содержит "+" то вернуться к началу цикла
$ind= Count2($myLine);
if(0 < $ind){
continue;
}
//разобьем строку и поместим ее в массив пословно
for($token = strtok($myLine, "|");$token != "";$token = strtok("|")) {
$Temp = "$token";
$masName[$n] = $Temp;
$n++;
}
}//end while
//----------------------------------
$tempo = $index*10;
//выведем шапку
$Temp = "<TABLE WIDTH=\"$tempo\" BORDER=1 CELLSPACING=0 CELLPADDING=0>\n<TR>";
fputs($fileOut,$Temp );

// сосчитаем количество элементов в массиве
$indexLimit = count($masName);

//выведем массив в файл
for($i=0;$i<$indexLimit;$i++) {

//строка из $index слов
if(0 != ($i+1)%($index) || $i == 0){

fputs($fileOut, "<TD><FONT SIZE =\"1\">$masName[$i]</TD>");
}
//перенос строки if(0 == ($i+1)%($index) && $i != 0){
fputs($fileOut,"\n</TR>\n<TR>" );
fputs($fileOut, "\n");
}
}//end for

//выведем подвал
$Temp = "</TR>\n</TABLE>\n";
fputs($fileOut,$Temp );

// закроем файлы
fclose($myFile);
fclose($fileOut);
fclose($Errorfile);

?>

Анализ

Суть программы в том, что данные считываются из исходного файла и помещаются в массив,
затем данные из массива перемещаются в новый файл-приемник. При этом предварительно
данные "одеваются" в html-теги.


Вверх

Обновлено 05.05.2011 07:48