Глава 1 (продолжение 1)
Обрабатывает два исходных каталога from1 и from2, берет из них данные и переносит в
каталог to1. При этом программа с каждым файлом проделывает следующее:
1. Берет Чердак из файла в каталоге from1 (в этом файле обрамление страницы - верх и низ),
копирует в файл который находится в каталоге to1.
2. Затем весь файл каталога from2 (в этом файле содержание страницы) копирует в режиме дополнения опять же в файл каталога to1.
3. И наконец берет Подвал из файла в каталоге from1 и копирует опять в режиме дополнения в файл каталога to1.
Таким образом в файле каталога to1 образуется то, что мне надо, а именно - полная страница к книге Каева с обрамлением и содержанием.
Так программа обрабатывает все файлы в указанных каталогах. Этих файлов могут быть сотни.
Программа работает. Как то даже обидно, что раньше я все это делал вручную!
А тут секунда и результат готов!
<?php
//from1 - каталог для считывания
//to1 - каталог для записи
//
//объявим массивы
$masNameFrom = array();
$masNameFrom2 = array();
//$masNameTo = array();
//-----------------------------
// откроем файл для записи ошибок
$filename = "error.txt";
if(!($myFile = fopen($filename, "w")))
{
print("Error: ");
print("'$filename' could not be created\n");
exit;
}
//-----------------------------
////////////////////////////////////////
// open directory
$myDirectoryFrom = opendir("from1");
$n=0;
// считаем в массив имена файлов из from1
while(FALSE !== ($entryName = readdir($myDirectoryFrom)))
{
$masNameFrom[$n] = $entryName;
$n++;
}
// сосчитаем количество элементов в массиве
$indexLimit = count($masNameFrom);
////////////////////////////////////////
// open directory
$myDirectoryFrom2 = opendir("from2");
$n=0;
// считаем в массив имена файлов из from2
while(FALSE !== ($entryName2 = readdir($myDirectoryFrom2)))
{
$masNameFrom2[$n] = $entryName2;
$n++;
}
// сосчитаем количество элементов в массиве
$indexLimit2 = count($masNameFrom2);
////////////////////////////////////////
//--------------------------------------------
// для каждого имени файла повторим цикл
for($index=2; $index < $indexLimit; $index++)
{
//---------------------------
// откроем файл для чтения
$Temp = "from1/";
$filenameFrom = "$Temp$masNameFrom[$index]";
if(!($myFileFrom = fopen($filenameFrom, "r")))
{
fputs($myFile, "'$filenameFrom' could not be opened\n" );
exit;
}
//---------------------------
// откроем файл для чтения
$Temp2 = "from2/";
$filenameFrom2 = "$Temp2$masNameFrom2[$index]";
if(!($myFileFrom2 = fopen($filenameFrom2, "r")))
{
fputs($myFile, "'$filenameFrom2' could not be opened\n" );
exit;
}
//---------------------------
//откроем файл для записи
$Temp1 = "to1/";
$filenameTo = "$Temp1$masNameFrom[$index]";
if(!($myFileTo = fopen($filenameTo, "w")))
{
fputs($myFile, "'$filenameTo' could not be created\n" );
exit;
}
////////////////////////////////////////////////////////
//// Главный цикл
////////////////////////////////////////////////////////\
//записываем чердак
//считаем построчно из файла $myFileFrom в файл $myFileTo
//считывание начнется с начала файла counter=число считанных строк
for($counter=0;$counter<32;$counter++)
{
//считаем строку из файла и запишем в новый
$myLine = fgets($myFileFrom, 255);
fputs($myFileTo, $myLine);
}
//-------------------------------------
//вставим в средину материал из другого файла
while(!feof($myFileFrom2))
{
//читаем строку из файла
$myLine = fgets($myFileFrom2, 255);
//запишем строку в новый файл
fputs($myFileTo, $myLine);
}
//----------------------------
//записываем подвал
//перенастроим указатель (300 байт от конца файла и до конца)
fseek($myFileFrom, -300, SEEK_END);
//считаем построчно из файла $myFileFrom в файл $myFileTo
//считывание начнется с определенной fseek() позиции
while(!feof($myFileFrom))
{
//читаем строку из файла
$myLine = fgets($myFileFrom, 255);
//запишем строку в новый файл
fputs($myFileTo, $myLine);
}
///////////////////////////////////////////
// закроем файлы
fclose($myFileFrom);
fclose($myFileFrom2);
fclose($myFileTo);
}//end for
//--------------------------------
// close directory
closedir($myDirectoryFrom);
closedir($myDirectoryFrom2);
fclose($myFile);
?>
Анализ:
Программа открывает требуемые каталоги from1 и from2 и считывает из них названия файлов в соответствующие массивы строк $masNameFrom и $masNameFrom2. Затем имена из этих массивов используются в цикле для задания пути и имени файла при его открытии для чтения или записи. Эта техника весьма мощна и эффективна. В обычном С++ такой техники нет!
В каждой итерации цикла, открывается два файла для считывания и один для записи, затем происходит собственно процесс считывания и записи, файлы закрываются. В новой итерации цикл повторяется. Для задания имен считываемых и записываемых файлов используются массивы имен файлов созданные и инициированные в начале программы.
Назад |
Начало урока |
Вверх |
Вперед
Содержание