mirror of
https://github.com/parsecsv/parsecsv-for-php.git
synced 2026-02-19 08:36:39 +00:00
parseCSV 0.4 beta
- Error reporting for files/data which is corrupt or has formatting errors like using double quotes in a field without enclosing quotes. Or not escaping double quotes with a second one. - parse() method does not require input anymore if the "$object->file" property has been set. I'm calling this a beta release due to the heavy modifications to the core parsing logic required for error reporting to work. I have tested the new code quite extensively, I'm fairly confident that it still parses exactly as it always has. The second reason I'm calling it a beta release is cause I'm sure the error reporting code will need more refinements and tweaks to detect more types of errors, as it's only picking two types or syntax errors right now. However, it seems these two are the most common errors that you would be likely to come across. git-svn-id: http://parsecsv-for-php.googlecode.com/svn/trunk@28 339761fc-0c37-0410-822d-8b8cac1f6a97
This commit is contained in:
@@ -4,7 +4,7 @@ class parseCSV {
|
||||
|
||||
/*
|
||||
|
||||
Class: parseCSV v0.3.3 beta
|
||||
Class: parseCSV v0.4 beta
|
||||
http://code.google.com/p/parsecsv-for-php/
|
||||
|
||||
|
||||
@@ -284,7 +284,7 @@ class parseCSV {
|
||||
$ch = $data{$i};
|
||||
$nch = ( isset($data{$i+1}) ) ? $data{$i+1} : false ;
|
||||
$pch = ( isset($data{$i-1}) ) ? $data{$i-1} : false ;
|
||||
|
||||
|
||||
// open and closing quotes
|
||||
if ( $ch == $enclosure ) {
|
||||
if ( !$enclosed || $nch != $enclosure ) {
|
||||
@@ -292,7 +292,7 @@ class parseCSV {
|
||||
} elseif ( $enclosed ) {
|
||||
$i++;
|
||||
}
|
||||
|
||||
|
||||
// end of row
|
||||
} elseif ( ($ch == "\n" && $pch != "\r" || $ch == "\r") && !$enclosed ) {
|
||||
if ( $n >= $search_depth ) {
|
||||
@@ -392,6 +392,7 @@ class parseCSV {
|
||||
$error_col = $col + 1;
|
||||
if ( !isset($this->error_info[$error_row.'-'.$error_col]) ) {
|
||||
$this->error_info[$error_row.'-'.$error_col] = array(
|
||||
'type' => 2,
|
||||
'info' => 'Syntax error found on row '.$error_row.'. Non-enclosed fields can not contain double-quotes.',
|
||||
'row' => $error_row,
|
||||
'field' => $error_col,
|
||||
@@ -409,15 +410,18 @@ class parseCSV {
|
||||
$enclosed = false;
|
||||
$i = $x;
|
||||
} else {
|
||||
$this->error = 1;
|
||||
if ( $this->error < 1 ) {
|
||||
$this->error = 1;
|
||||
}
|
||||
$error_row = count($rows) + 1;
|
||||
$error_col = $col + 1;
|
||||
if ( !isset($this->error_info[$error_row.'-'.$error_col]) ) {
|
||||
$this->error_info[$error_row.'-'.$error_col] = array(
|
||||
'type' => 1,
|
||||
'info' =>
|
||||
'Syntax error found on row '.(count($rows) + 1).'. '.
|
||||
'Fields containing double quotes must be enclosed with double quotes. '.
|
||||
'Additionally, two double quotes must be used within an enclosed field rather than a single one.',
|
||||
'A single double-quote was found within an enclosed string. '.
|
||||
'Enclosed double-quotes must be escaped with a second double-quote.',
|
||||
'row' => count($rows) + 1,
|
||||
'field' => $col + 1,
|
||||
'field_name' => (!empty($head[$col])) ? $head[$col] : null,
|
||||
@@ -429,18 +433,15 @@ class parseCSV {
|
||||
} else {
|
||||
$enclosed = false;
|
||||
}
|
||||
|
||||
|
||||
// end of field/row
|
||||
} elseif ( ($ch == $this->delimiter || $ch == "\n" || $ch == "\r") && !$enclosed ) {
|
||||
$key = ( !empty($head[$col]) ) ? $head[$col] : $col ;
|
||||
if ( $was_enclosed && $current{strlen($current)-1} == $this->enclosure ) {
|
||||
$current = substr($current, 0, -1);
|
||||
}
|
||||
$row[$key] = ( $was_enclosed ) ? $current : trim($current) ;
|
||||
$current = '';
|
||||
$was_enclosed = false;
|
||||
$col++;
|
||||
|
||||
|
||||
// end of row
|
||||
if ( $ch == "\n" || $ch == "\r" ) {
|
||||
if ( $this->_validate_offset($row_count) && $this->_validate_row_conditions($row, $this->conditions) ) {
|
||||
|
||||
Reference in New Issue
Block a user