<?php

//*************************************************************************
// in_data_file.php : implementation file
// Version : 1.0
// Date :  December 2013
// Author : Andre Dolenko
// Email :  bigfozzy@gmail.com
// Latest Version : http://x-datas.com/
//*************************************************************************

//////////////////////////////////////////////////// РАБОТА С ТЕКСТОВЫМ ФАЙЛОМ ///////////////////////////////////////////////////////////////////////
class CInDataFile
{
    
///////////////////////////////////////////////////

    // путь к файлу данных
    
var $path;
    
// имя элемента файла
    
var $name_item;
    
    
// теущая позиция в файле данных
    
var $current_pos=0;

    
// сколько за раз получать слов из источника
    
var $items_step;

    
///////////////////////////////////////////////////

    // конструктор ($path - путь к файлу данных, $name_item - название содержимого файла )
    
function CInDataFile($path,$name_item,$step_pause,$items_step=1)
    {
        
// путь к файлу данных
        
$this->path=$path;
        
        
// имя элемента файла
        
$this->name_item=$name_item;

        
// пауза перед следующим шагом
        
$this->step_pause=$step_pause;

        
// сколько за раз получать слов из источника
        
$this->items_step=$items_step;

        
// инициализируем информацию о продолжении        
        
$this->init_continue_info();
    }

    
// получить информацию о продолжении
    
private function init_continue_info()
    {
        
// получим откуда продолжать
        
$this->current_pos CTextFile::get_line($this->path.".continue.txt",0);

        
// если нет файла с позицией продолжения то начинаем с нуля
        
if ($this->current_pos===null)
            
$this->current_pos=0;

        
// если мы закончили файл - то начнем его с нуля
        
if (CTextFile::get_line($this->path,$this->current_pos)===null)
            
$this->current_pos=0;

        
// лог
        
global $log;
        
$log->event("Запуск : начиная с ".$this->current_pos." ".$this->name_item."а");
    }

    
///////////////////////////////////////////////////

    // получить следующие данные
    
function get_next()
    {
        if (
$this->items_step==1)
            return 
CTextFile::get_line($this->path,$this->current_pos);
        else
            return 
CTextFile::get_lines($this->path,$this->current_pos,$this->items_step);
    }

    
// получить сколько всего данных ао входном файле
    
function get_count()
    {
        return 
CTextFile::get_lines_count($this->path);
    }

    
// получить текущую позицию
    
function get_current_pos()
    {
        return 
$this->current_pos;
    }

    
// указать что шаг завершен
    
function step_complete()
    {
        
// укажем что обработали
        
$this->current_pos+=$this->items_step;

        
// зхапишем обработтаную позицию в файл продолжения
        
CTextFile::write($this->path.".continue.txt",$this->current_pos);
    }

    
///////////////////////////////////////////////////
};
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
?>