note 68213 added to function.fgetcsv
| From: | myrddin at myrddin dot myrddin | Date: | Tue, 18 Jul 2006 16:14:19 +0000 |
| Subject: | note 68213 added to function.fgetcsv | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-114889@lists.php.net to get a copy of this message | ||
Here is a OOP based importer similar to the one posted earlier. However, this is slightly more
flexible in that you can import huge files without running out of memory, you just have to use a
limit on the get() method
Sample usage for small files:-
-------------------------------------
$importer = new CsvImporter("small.txt",true);
$data = $importer->get();
print_r($data);
Sample usage for large files:-
-------------------------------------
$importer = new CsvImporter("large.txt",true);
while($data = $importer->get(2000))
{
print_r($data);
}
And heres the class:-
-------------------------------------
class CsvImporter
{
private $fp;
private $parse_header;
private $header;
private $delimiter;
private $length;
//--------------------------------------------------------------------
function __construct($file_name, $parse_header=false, $delimiter="\t", $length=8000)
{
$this->fp = fopen($file_name, "r");
$this->parse_header = $parse_header;
$this->delimiter = $delimiter;
$this->length = $length;
$this->lines = $lines;
if ($this->parse_header)
{
$this->header = fgetcsv($this->fp, $this->length, $this->delimiter);
}
}
//--------------------------------------------------------------------
function __destruct()
{
if ($this->fp)
{
fclose($this->fp);
}
}
//--------------------------------------------------------------------
function get($max_lines=0)
{
//if $max_lines is set to 0, then get all the data
$data = array();
if ($max_lines > 0)
$line_count = 0;
else
$line_count = -1; // so loop limit is ignored
while ($line_count < $max_lines && ($row = fgetcsv($this->fp,
$this->length, $this->delimiter)) !== FALSE)
{
if ($this->parse_header)
{
foreach ($this->header as $i => $heading_i)
{
$row_new[$heading_i] = $row[$i];
}
$data[] = $row_new;
}
else
{
$data[] = $row;
}
if ($max_lines > 0)
$line_count++;
}
return $data;
}
//--------------------------------------------------------------------
}
----
Server IP: 216.235.15.211
Probable Submitter: 209.112.47.82
----
X-Spam-Status: No, hits=3.1 required=5.0 tests=DATE_MISSING,FROM_NO_LOWER
autolearn=no version=2.64
----
Manual Page -- http://www.php.net/manual/en/function.fgetcsv.php
Edit -- http://master.php.net/note/edit/68213
Del: integrated -- http://master.php.net/note/delete/68213/integrated
Del: useless -- http://master.php.net/note/delete/68213/useless
Del: bad code -- http://master.php.net/note/delete/68213/bad+code
Del: spam -- http://master.php.net/note/delete/68213/spam
Del: non-english -- http://master.php.net/note/delete/68213/non-english
Del: in docs -- http://master.php.net/note/delete/68213/in+docs
Del: other reasons-- http://master.php.net/note/delete/68213
Reject -- http://master.php.net/note/reject/68213
Search -- http://master.php.net/manage/user-notes.php