@@ -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