Part of the EllisLab Network
x
 
Create New Page
 View Previous Changes    ( Last updated by pjturpeau )

CSVReader

Category:Libraries -> CSV

CSV Formatted Data Reader

This is a utility class built to support my own strategy for multilingual and translation management as explained in the LangBuilder entry.

But I’m sure you’ll find other kind of usage…

Requirements

* 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).

The library 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;
    
}
}
?> 

Category:Contributions -> Libraries -> Files