<?php
class csv_import {
/*
** NEDERLANDS **
Met deze class kan en CSV worden geimporteerd en ingelezen.
Ik heb deze class geschreven omdat de fgetcsv() functie van php quotes die niet ge-escaped zijn niet goed pakt, ook is deze class een stuk sneller
Wanneer de class word word aangeroepen zijn er 3 variabelen die mee kunnen worden gegeven
Eerste : De $_FILES array waar mee gewerkt moet worden
Tweede : Wanneer de eerste regel gebruikt moet worden om de array genaamde keys moet hebben
Derde : Waarmee de items worden gescheden, de quotes die worden gebruikt moeten worden meegeven
** ENGLISH **
With this class u can import a CSV and read it
I wrote this class because the built-in fgetcsv() function from php doesnt work well with unescaped quote's and this class is a bit faster aswell
When the class gets called there are 3 variables that can be given
First : The $_FILES array that should be used
Second : When the fist line of the CSV must be to give the retuning array named keys
Third : The delimiter of the CSV, quotes that are used must olso be given
Created by Sc0tTy on 05-12-2006
Last modified on 05-12-2006
www.SenS-Design.nl
*/
// --------------------------------------------------------------------
// Variabelen vastzetten
var $arr_handle = array(); var $cur_line = 0;
var $name_keys = FALSE;
var $delimiter = "','";
// --------------------------------------------------------------------
// Classe starten en de settings goedzetten
function csv_import( $csv = FALSE , $name_keys = FALSE , $delimiter = FALSE ) {
// Kijken of er wel een csv bestand is gegeven
if ( !$csv['tmp_name'] ) {
$this->handle_error( 'Er is geen CSV bestand gegeven.' );
}
// Kijken of dit wel een csv bestand is
$arr_types = array( 'application/vnd.ms-excel' , 'text/comma-separated-values' ); if ( !in_array( $csv['type'] , $arr_types ) ) { $this->handle_error( 'Dit is geen CSV bestand.' );
}
// CSV openen
$file = fopen( $csv['tmp_name'] , 'r' ); if ( !$file ) {
$this->handle_error( 'Het CSV bestand kon niet worden geopend.' );
}
// CSV inlezen
while ( $handle = fread( $file , filesize( $csv['tmp_name'] ) ) ) {
$arr_chars['search'] = array( "\n\r", "\r\n" , "\r" ); $arr_chars['replac'] = array( "\n" , "\n" , "\n" );
// Newline breaks goed zijn
if ( strstr( "\r" , $handle ) ) { str_replace( $arr_chars['search'] , $arr_chars['replac'] , $handle ); }
// Regels exploden
$handle = explode( "\n" , $handle );
// Lijn in array zetten
$this->arr_handle[] = $handle;
}
// De eerste regel van een csv
if ( is_array( $this->arr_handle[0] ) ) { } else {
}
// Wanneer deze parameter TRUE is worden de namen in de eerste regel gebruikt om de keys te geven, de keys worden hier opgeslagen
if ( $name_keys ) {
$this->name_keys = $this->explode_line( $csv_keys );
}
// Door geimporteerde CSV lopen en deze in eigen arrays zetten
foreach ( $this->arr_handle AS $line ) {
foreach ( $line AS $row ) {
$this->arr_csv[] = $this->explode_line( $row );
}
} else {
$this->arr_csv[] = $this->explode_line( $line );
}
}
// Laaste regel is leeg deze kan worden verwijdert
if ( $delimiter ) {
$this->delimiter = $delimiter;
}
// Bestand sluiten
}
// --------------------------------------------------------------------
// Explode de regel
function explode_line( $line ) {
// Quotes escapen
if ( strstr( $line , '","' ) ) { $this->delimiter = '","';
}
// Eerste en laatste quote weghalen
$line = substr( $line , 1 , -1 );
// Exploden
$line = explode( $this->delimiter , $line );
// Wanneer deze parameter TRUE is worden de namen in de eerste regel gebruikt om de keys te geven, hier worden de keys verrandert
if ( $this->name_keys ) {
foreach ( $line AS $key => $value ) {
$tmp[ $this->name_keys[ $key ] ] = $value;
}
$line = $tmp;
}
return $line;
}
// --------------------------------------------------------------------
// Leest door array en returned huidige regel
function read_line() {
// Kijken of de array nog wel bestaat
if ( $this->arr_csv == NULL ) {
return FALSE;
}
// Kijken of de lijn wel bestaat zo niet geheugen vrijgeven en afsluiten
if ( !$this->arr_csv[ $this->cur_line ] ) {
$this->csv_close();
return FALSE;
}
// Huidige lijn verhogen
$this->cur_line++;
return $this->arr_csv[ $this->cur_line-1 ];
}
// --------------------------------------------------------------------
// Wanneer er een error is moet deze correct worden weergegeven
function handle_error( $error ) {
die( 'CLASS :: csv_import :: ERROR :: ' . $error ); }
// --------------------------------------------------------------------
// Wanneer de class klaar is alle variabelen leegmaken
function csv_close() {
$this->arr_handle = NULL;
$this->arr_csv = NULL;
$this->cur_line = NULL;
}
}
?>