CSV import

Ako imate peh da morate raditi redovan import podataka iz jedne baze, tko zna kako posložene u svoju (urednu!) bazu, ovakva skripta je korisna. Pronašao sam je na http://www.phpclasses.org/ i uredno obavlja svoj posao. Ova klasa podešena je da prebacuje podatke u neku bazu, a možete koristiti podatke i na neki drugačiji način, ispis na ekran ili sl.Inicijalizacija objekta može biti na slijedeći način:

<?php
  
include("class_csvimport.php");

  
$csv =& new read_csv();
  
$csv->read_csv_run("foo.csv");
?>

Klasa u koju je smješten cijeli proces, nazvali smo class_csvimport.php izgleda ovako:

<?php
 
class read_csv {
    function 
read_csv () {
        
// nothing
    
}

    function 
read_csv_run($f="") {
    
// ako koristimo csv za upisivanje podatak u bazu, pozivamo connection string iz vanjske datoteke dbase.php
        
include("../dbase.php");

        if ( 
$f AND is_file($f) ) {
            
// set excel type delimiter, etc
            
$delimiter ';';
            
$enclosure '"';

            
// read file & parse
            
$input file($f);
            
$csv = array();
            foreach ( 
$input as $key => $value ) {
                
// rtrim crap at the end of the str    ing
                
$tmp explode($delimiter,rtrim($value));

                
// parse
                
$in_quote false;
                
$arr = array();
                foreach ( 
$tmp as $key => $value ) {
                    if ( 
$in_quote ) {
                        if ( 
$this->read_csv_has_quote($value,$enclosure) ) {
                            
$in_quote false;
                            
$value substr_replace($value,'',-1,1);
                        }
                        
$key = (count($arr)-1);
                        
$arr[$key] .= $delimiter.$value// continue last array element
                    
} else {
                        if ( 
$this->read_csv_has_quote($value,$enclosure) ) {
                            
$in_quote true;
                            
$value substr_replace($value,'',0,1);
                        } else if ( 
substr($value,0,1) == $enclosure AND substr($value,-1,1) == $enclosure ) {
                            
// string is quoted, remove quotes
                            
$value substr_replace($value,'',0,1); // start
                            
$value substr_replace($value,'',-1,1); // end
                        
}
                        
$arr[] = $value// append to array
                    
}               
                }

                foreach ( 
$arr as $key ) {
                    
$arr[$key] = str_replace($enclosure.$enclosure,$enclosure,$value);
                }

                
// append to array
                
$csv[] = $arr;
            } 
// end foreach
           
            
for($i 0$i count($csv); $i++) {
              
$value $csv[$i];
                  
              
$sql mysqli_query($db"INSERT INTO table (col1, col2, col3) VALUES ( '$value[0]', '$value[1]', '$value[2]', '$value[3]') ");  
                               
              }
            
        }   
    }   
// end func
    
    
    
function read_csv_has_quote ($str="",$enc="") {
        
$c substr_count($str,$enc);
        if ( 
stristr(($c/2),".") ) {
            return 
true;
        }
    }
     
           
// end class
?>