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:
zynode
2008-04-11 18:13:37 +00:00
parent 2dfd35b988
commit 70366e3085
3 changed files with 55 additions and 25 deletions

View File

@@ -1,3 +1,32 @@
parseCSV 0.4 beta
-----------------------------------
Date: 11-Apr-2008
- 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.
-----------------------------------
parseCSV 0.3.2 parseCSV 0.3.2
----------------------------------- -----------------------------------
Date: 1-Apr-2008 Date: 1-Apr-2008

View File

@@ -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/ http://code.google.com/p/parsecsv-for-php/
@@ -392,6 +392,7 @@ class parseCSV {
$error_col = $col + 1; $error_col = $col + 1;
if ( !isset($this->error_info[$error_row.'-'.$error_col]) ) { if ( !isset($this->error_info[$error_row.'-'.$error_col]) ) {
$this->error_info[$error_row.'-'.$error_col] = array( $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.', 'info' => 'Syntax error found on row '.$error_row.'. Non-enclosed fields can not contain double-quotes.',
'row' => $error_row, 'row' => $error_row,
'field' => $error_col, 'field' => $error_col,
@@ -409,15 +410,18 @@ class parseCSV {
$enclosed = false; $enclosed = false;
$i = $x; $i = $x;
} else { } else {
$this->error = 1; if ( $this->error < 1 ) {
$this->error = 1;
}
$error_row = count($rows) + 1; $error_row = count($rows) + 1;
$error_col = $col + 1; $error_col = $col + 1;
if ( !isset($this->error_info[$error_row.'-'.$error_col]) ) { if ( !isset($this->error_info[$error_row.'-'.$error_col]) ) {
$this->error_info[$error_row.'-'.$error_col] = array( $this->error_info[$error_row.'-'.$error_col] = array(
'type' => 1,
'info' => 'info' =>
'Syntax error found on row '.(count($rows) + 1).'. '. 'Syntax error found on row '.(count($rows) + 1).'. '.
'Fields containing double quotes must be enclosed with double quotes. '. 'A single double-quote was found within an enclosed string. '.
'Additionally, two double quotes must be used within an enclosed field rather than a single one.', 'Enclosed double-quotes must be escaped with a second double-quote.',
'row' => count($rows) + 1, 'row' => count($rows) + 1,
'field' => $col + 1, 'field' => $col + 1,
'field_name' => (!empty($head[$col])) ? $head[$col] : null, 'field_name' => (!empty($head[$col])) ? $head[$col] : null,
@@ -433,9 +437,6 @@ class parseCSV {
// end of field/row // end of field/row
} elseif ( ($ch == $this->delimiter || $ch == "\n" || $ch == "\r") && !$enclosed ) { } elseif ( ($ch == $this->delimiter || $ch == "\n" || $ch == "\r") && !$enclosed ) {
$key = ( !empty($head[$col]) ) ? $head[$col] : $col ; $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) ; $row[$key] = ( $was_enclosed ) ? $current : trim($current) ;
$current = ''; $current = '';
$was_enclosed = false; $was_enclosed = false;