Skip to content

Commit 003e2ff

Browse files
committed
Support FuelLog's encoded with semicolon as delimiter
1 parent d3f6a34 commit 003e2ff

File tree

1 file changed

+27
-8
lines changed

1 file changed

+27
-8
lines changed

lib/fuelioimporter/providers/fuellogprovider.class.php

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ class FuellogProvider implements IConverter
2020
protected $selected_vehicle = null;
2121
/** @var string|null Output filename */
2222
protected $output_filename = null;
23+
/** @var string Delimiter used in CSV parser */
24+
private $delimiter = ',';
2325

2426
public function getName()
2527
{
@@ -75,13 +77,13 @@ public function processFile(\SplFileObject $in, $form_data)
7577
// Prepare output generator
7678
$out = new FuelioBackupBuilder();
7779

78-
$line = $in->fgetcsv();
80+
$line = $in->fgetcsv($this->delimiter);
7981
if ($line[0] !== '## vehicles') {
8082
throw new InvalidFileFormatException();
8183
}
8284

8385
// Import vehicles
84-
$this->selected_vehicle = intval($form_data['vehicle_id'], 10) - 1;
86+
$this->selected_vehicle = (int)$form_data['vehicle_id'] - 1;
8587
if ($this->selected_vehicle < 0) {
8688
$this->selected_vehicle = null; // Autoselect
8789
}
@@ -96,6 +98,21 @@ public function processFile(\SplFileObject $in, $form_data)
9698
return $out;
9799
}
98100

101+
protected function detectDelimiter(\SplFileObject $in)
102+
{
103+
$pos = $in->ftell();
104+
$line = $in->fgetcsv($this->delimiter);
105+
if ($line[0] !== 'make') {
106+
$this->delimiter = ';';
107+
$in->fseek($pos);
108+
$line = $in->fgetcsv($this->delimiter);
109+
if ($line[0] !== 'make') {
110+
throw new InvalidFileFormatException();
111+
}
112+
}
113+
$in->fseek($pos);
114+
}
115+
99116
/**
100117
* Reads vehicles from Fuel Log's export
101118
* @param \SplFileObject $in
@@ -106,12 +123,14 @@ public function processFile(\SplFileObject $in, $form_data)
106123
protected function processVehicles(\SplFileObject $in, FuelioBackupBuilder $out)
107124
{
108125
// "make","model","note","distance","volume","consumption"
109-
$header = $in->fgetcsv();
126+
$this->detectDelimiter($in);
127+
$header = $in->fgetcsv($this->delimiter);
128+
110129
if ($header[0] !== 'make' || count($header) < 6) {
111130
throw new InvalidFileFormatException();
112131
}
113132
do {
114-
if (!($line = $in->fgetcsv()) || strpos($line[0], '#', 0) === 0) {
133+
if (!($line = $in->fgetcsv($this->delimiter)) || strpos($line[0], '#', 0) === 0) {
115134
break;
116135
}
117136
$key = $line[0] . '.' . $line[1];
@@ -163,15 +182,15 @@ protected function processVehicles(\SplFileObject $in, FuelioBackupBuilder $out)
163182
protected function processFillups(\SplFileObject $in, FuelioBackupBuilder $out)
164183
{
165184
// "make","model","date","mileage","fuel","price","partial","note"
166-
$header = $in->fgetcsv();
185+
$header = $in->fgetcsv($this->delimiter);
167186
if ($header[0] !== 'make' || count($header) !== 8) {
168187
throw new InvalidFileFormatException();
169188
}
170189

171190
$out->writeFuelLogHeader();
172191

173192
do {
174-
$data = $in->fgetcsv();
193+
$data = $in->fgetcsv($this->delimiter);
175194
if (!$data) {
176195
continue;
177196
}
@@ -200,7 +219,7 @@ protected function processCosts(\SplFileObject $in, FuelioBackupBuilder $out) {
200219
return; // Turns out costs are optional in file, so skip if we are at its end
201220
}
202221

203-
$header = $in->fgetcsv();
222+
$header = $in->fgetcsv($this->delimiter);
204223
if ($header[0] !== 'make' || count($header) !== 8) {
205224
throw new InvalidFileFormatException();
206225
}
@@ -213,7 +232,7 @@ protected function processCosts(\SplFileObject $in, FuelioBackupBuilder $out) {
213232
$out->writeCoststHeader();
214233

215234
do {
216-
$data = $in->fgetcsv();
235+
$data = $in->fgetcsv($this->delimiter);
217236
if (!$data) {
218237
continue;
219238
}

0 commit comments

Comments
 (0)