$this->auto_non_chars didn't work the way I would have expected:

The "-" was taken literally, and thus 0 was forbidden, but 1 was allowed.

Fixes #55.
Also see #61
This commit is contained in:
Christian Bläul
2018-01-21 18:57:38 +01:00
committed by Fonata
parent 47f691ce33
commit b004911218
2 changed files with 18 additions and 3 deletions

View File

@@ -905,8 +905,8 @@ class parseCSV {
/**
* Validate a row against a single condition
*
* @param array $row array with values from a row
* @param string $condition specified condition that the row must match
* @param array $row array with values from a row
* @param string $condition specified condition that the row must match
*
* @return string single 0 or 1
*/
@@ -1181,7 +1181,12 @@ class parseCSV {
$enclosed = false;
$current_row = 1;
$to_end = true;
$pattern = '/[' . preg_quote($this->auto_non_chars, '/') . ']/i';
// The dash is the only character we don't want quoted, as it would
// prevent character ranges within $auto_non_chars:
$quoted_auto_non_chars = preg_quote($this->auto_non_chars, '/');
$quoted_auto_non_chars = str_replace('\-', '-', $quoted_auto_non_chars);
$pattern = '/[' . $quoted_auto_non_chars . ']/i';
// walk specific depth finding possible delimiter characters
for ($i = 0; $i < $strlen; $i++) {

View File

@@ -52,6 +52,16 @@ class ParseTest extends PHPUnit\Framework\TestCase {
$this->assertEquals($expected_data, $row);
}
public function testAllNumericalCsv() {
$this->csv->heading = false;
$sInput = "86545235689\r\n34365587654\r\n13469874576";
$this->assertEquals(false, $this->csv->auto($sInput));
$this->assertEquals(null, $this->csv->delimiter);
$expected_data = explode("\r\n", $sInput);
$actual_data = array_map('reset', $this->csv->data);
$this->assertEquals($expected_data, $actual_data);
}
public function test_sep_row_auto_detection_UTF8() {
$this->_autoparse_magazine_file(
__DIR__ . '/../example_files/UTF-8_with_BOM_and_sep_row.csv');