-
Notifications
You must be signed in to change notification settings - Fork 7.6k
CSVReader
[h3]CSV Formatted Data Reader[/h3]
This is a utility class built to support my own strategy for multilingual and translation management as explained in the [url=http://www.codeigniter.com/Wiki/LangBuilder]LangBuilder[/url] entry.
But I'm sure you'll find other kind of usage...
[h3]Requirements[/h3]
- CI: tested on 1.6.2
- PHP: tested on 5.2.9
Updated to use the more reliable fgetcsv() native function in a php4 compatible way (not verified).
[h3]The library code[/h3]
[code]<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); /**
-
CSVReader Class
-
$Id: csvreader.php 54 2009-10-21 21:01:52Z Pierre-Jean $ -
Allows to retrieve a CSV file content as a two dimensional array.
-
Optionally, the first text line may contains the column names to
-
be used to retrieve fields values (default).
-
Let's consider the following CSV formatted data:
-
"col1";"col2";"col3"
-
"11";"12";"13"
-
"21;"22;"2;3"
-
It's returned as follow by the parsing operation with first line
-
used to name fields:
-
Array(
-
[0] => Array(
-
[col1] => 11,
-
[col2] => 12,
-
[col3] => 13
-
)
-
[1] => Array(
-
[col1] => 21,
-
[col2] => 22,
-
[col3] => 2;3
-
)
-
)
-
@author Pierre-Jean Turpeau
-
@link http://www.codeigniter.com/wiki/CSVReader */ class CSVReader {
var $fields; /** columns names retrieved after parsing / var $separator = ';'; /* separator used to explode each line / var $enclosure = '"'; /* enclosure used to decorate each field */
var $max_row_size = 4096; /** maximum row size to be used for decoding */
/**
-
Parse a file containing CSV formatted data.
-
@access public
-
@param string
-
@param boolean
-
@return array */ function parse_file($p_Filepath, $p_NamedFields = true) { $content = false; $file = fopen($p_Filepath, 'r'); if($p_NamedFields) { $this->fields = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure); } while( ($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false ) {
if( $row[0] != null ) { // skip empty lines if( !$content ) { $content = array(); } if( $p_NamedFields ) { $items = array();// I prefer to fill the array with values of defined fields foreach( $this->fields as $id => $field ) { if( isset($row[$id]) ) { $items[$field] = $row[$id]; } } $content[] = $items; } else { $content[] = $row; } }
} fclose($file); return $content; } } ?> [/code]
-