login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Handige scripts > [CLASS] csv_import

[CLASS] csv_import

Auteur: Sc0tTy - 05 december 2006 - 16:14 - Gekeurd door: Wijnand - Hits: 2508 - Aantal punten: (0 stemmen)




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

De class kan zo worden aangeroepen :
  1. <?php
  2. $csv = new csv_import( $_FILES['csv'] );
  3.  
  4. // Door CSV lopen en in sessie zetten
  5. while ( $tmp_csv = $csv->read_line() ) {
  6. print_r( $tmp_csv );
  7. }
  8. ?>


EDIT :: 2 kleine foutjes hersteld


Code:
  1. <?php
  2. class csv_import {
  3.  
  4. /*
  5. ** NEDERLANDS **
  6. Met deze class kan en CSV worden geimporteerd en ingelezen.
  7. 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
  8.  
  9. Wanneer de class word word aangeroepen zijn er 3 variabelen die mee kunnen worden gegeven
  10. Eerste : De $_FILES array waar mee gewerkt moet worden
  11. Tweede : Wanneer de eerste regel gebruikt moet worden om de array genaamde keys moet hebben
  12. Derde : Waarmee de items worden gescheden, de quotes die worden gebruikt moeten worden meegeven
  13.  
  14. ** ENGLISH **
  15. With this class u can import a CSV and read it
  16. 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
  17.  
  18. When the class gets called there are 3 variables that can be given
  19.  
  20. First : The $_FILES array that should be used
  21. Second : When the fist line of the CSV must be to give the retuning array named keys
  22. Third : The delimiter of the CSV, quotes that are used must olso be given
  23.  
  24. Created by Sc0tTy on 05-12-2006
  25. Last modified on 05-12-2006
  26. www.SenS-Design.nl
  27. */
  28.  
  29. // --------------------------------------------------------------------
  30. // Variabelen vastzetten
  31. var $arr_handle = array();
  32. var $arr_csv = array();
  33. var $cur_line = 0;
  34. var $name_keys = FALSE;
  35. var $delimiter = "','";
  36.  
  37. // --------------------------------------------------------------------
  38. // Classe starten en de settings goedzetten
  39. function csv_import( $csv = FALSE , $name_keys = FALSE , $delimiter = FALSE ) {
  40.  
  41. // Kijken of er wel een csv bestand is gegeven
  42. if ( !$csv['tmp_name'] ) {
  43. $this->handle_error( 'Er is geen CSV bestand gegeven.' );
  44. }
  45.  
  46. // Kijken of dit wel een csv bestand is
  47. $arr_types = array( 'application/vnd.ms-excel' , 'text/comma-separated-values' );
  48. if ( !in_array( $csv['type'] , $arr_types ) ) {
  49. $this->handle_error( 'Dit is geen CSV bestand.' );
  50. }
  51.  
  52. // CSV openen
  53. $file = fopen( $csv['tmp_name'] , 'r' );
  54. if ( !$file ) {
  55. $this->handle_error( 'Het CSV bestand kon niet worden geopend.' );
  56. }
  57.  
  58. // CSV inlezen
  59. while ( $handle = fread( $file , filesize( $csv['tmp_name'] ) ) ) {
  60.  
  61. $arr_chars['search'] = array( "\n\r", "\r\n" , "\r" );
  62. $arr_chars['replac'] = array( "\n" , "\n" , "\n" );
  63.  
  64. // Newline breaks goed zijn
  65. if ( strstr( "\r" , $handle ) ) {
  66. str_replace( $arr_chars['search'] , $arr_chars['replac'] , $handle );
  67. }
  68.  
  69. // Regels exploden
  70. $handle = explode( "\n" , $handle );
  71.  
  72. // Lijn in array zetten
  73. $this->arr_handle[] = $handle;
  74. }
  75.  
  76. // De eerste regel van een csv
  77. if ( is_array( $this->arr_handle[0] ) ) {
  78. $csv_keys = array_shift( $this->arr_handle[0] );
  79. } else {
  80. $csv_keys = array_shift( $this->arr_handle );
  81. }
  82.  
  83. // Wanneer deze parameter TRUE is worden de namen in de eerste regel gebruikt om de keys te geven, de keys worden hier opgeslagen
  84. if ( $name_keys ) {
  85. $this->name_keys = $this->explode_line( $csv_keys );
  86. }
  87.  
  88. // Door geimporteerde CSV lopen en deze in eigen arrays zetten
  89. foreach ( $this->arr_handle AS $line ) {
  90. if ( is_array( $line ) ) {
  91. foreach ( $line AS $row ) {
  92. $this->arr_csv[] = $this->explode_line( $row );
  93. }
  94. } else {
  95. $this->arr_csv[] = $this->explode_line( $line );
  96. }
  97. }
  98.  
  99. // Laaste regel is leeg deze kan worden verwijdert
  100. array_pop( $this->arr_csv );
  101.  
  102. if ( $delimiter ) {
  103. $this->delimiter = $delimiter;
  104. }
  105.  
  106. // Bestand sluiten
  107. fclose( $file );
  108. }
  109.  
  110. // --------------------------------------------------------------------
  111. // Explode de regel
  112. function explode_line( $line ) {
  113.  
  114. // Quotes escapen
  115. if ( strstr( $line , '","' ) ) {
  116. str_replace( '"' , '\"' , $line );
  117. str_replace( '\",\"' , '","' , $line );
  118. $this->delimiter = '","';
  119. }
  120.  
  121. $line = chop( $line );
  122.  
  123. // Eerste en laatste quote weghalen
  124. $line = substr( $line , 1 , -1 );
  125.  
  126. // Exploden
  127. $line = explode( $this->delimiter , $line );
  128.  
  129. // Wanneer deze parameter TRUE is worden de namen in de eerste regel gebruikt om de keys te geven, hier worden de keys verrandert
  130. if ( $this->name_keys ) {
  131. foreach ( $line AS $key => $value ) {
  132. $tmp[ $this->name_keys[ $key ] ] = $value;
  133. }
  134. $line = $tmp;
  135. }
  136.  
  137. return $line;
  138. }
  139.  
  140. // --------------------------------------------------------------------
  141. // Leest door array en returned huidige regel
  142. function read_line() {
  143.  
  144. // Kijken of de array nog wel bestaat
  145. if ( $this->arr_csv == NULL ) {
  146. return FALSE;
  147. }
  148.  
  149. // Kijken of de lijn wel bestaat zo niet geheugen vrijgeven en afsluiten
  150. if ( !$this->arr_csv[ $this->cur_line ] ) {
  151. $this->csv_close();
  152. return FALSE;
  153. }
  154.  
  155. // Huidige lijn verhogen
  156. $this->cur_line++;
  157. return $this->arr_csv[ $this->cur_line-1 ];
  158. }
  159.  
  160. // --------------------------------------------------------------------
  161. // Wanneer er een error is moet deze correct worden weergegeven
  162. function handle_error( $error ) {
  163. die( 'CLASS :: csv_import :: ERROR :: ' . $error );
  164. }
  165.  
  166. // --------------------------------------------------------------------
  167. // Wanneer de class klaar is alle variabelen leegmaken
  168. function csv_close() {
  169. $this->arr_handle = NULL;
  170. $this->arr_csv = NULL;
  171. $this->cur_line = NULL;
  172. }
  173. }
  174. ?>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (2)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.046s