CsvAutoDelimiterFormatFactory::guessDelimiter()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2.0078

Importance

Changes 0
Metric Value
dl 0
loc 15
ccs 7
cts 8
cp 0.875
rs 9.7666
c 0
b 0
f 0
cc 2
nc 2
nop 1
crap 2.0078
1
<?php
2
3
namespace Mathielen\ImportEngine\Storage\Format\Factory;
4
5
use Mathielen\ImportEngine\Storage\Format\CsvFormat;
6
7
class CsvAutoDelimiterFormatFactory implements FormatFactoryInterface
8
{
9
    /**
10
     * @return \Mathielen\ImportEngine\Storage\Format\Format
11
     */
12 1
    public function factor($uri)
13
    {
14 1
        $file = new \SplFileObject($uri);
15 1
        $delimiter = $this->guessDelimiter(utf8_encode($file->getCurrentLine()));
16
17 1
        return new CsvFormat($delimiter);
18
    }
19
20 6
    public function guessDelimiter($line)
21
    {
22 6
        $specialCharString = preg_replace('/[a-z0-9éâëïüÿçêîôûéäöüß\n\r "]/iu', '', $line);
23
24 6
        $charStats = count_chars($specialCharString, 1);
25
26 6
        if (empty($charStats)) {
27
            throw new \LogicException('Could not discover CSV-delimiter!');
28
        }
29
30 6
        arsort($charStats);
31 6
        $delimiter = chr(key($charStats));
32
33 6
        return $delimiter;
34
    }
35
}
36