Skip to content

Commit

Permalink
Add occupancy parser
Browse files Browse the repository at this point in the history
  • Loading branch information
ksharma-xyz committed Aug 30, 2024
1 parent 9e6fc39 commit addfeac
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package xyz.ksharma.krail.data.gtfs_static.parser

import timber.log.Timber
import xyz.ksharma.krail.model.gtfs_static.Occupancy
import java.io.BufferedReader
import java.io.FileReader
import java.io.IOException
import java.nio.file.Path

object OccupancyParser {

fun Path.parseOccupancy(): List<Occupancy> {
val occupancyList = mutableListOf<Occupancy>()

try {
BufferedReader(FileReader(this.toString())).use { reader ->
val headersList = reader.readLine().split(",").trimQuotes()
// todo use headers instead of hard code later.
//Log.d(TAG, "headersList: $headersList")

var line: String?

while (true) {
line = reader.readLine() ?: break

// Process the line in a buffered manner
val fieldsList = mutableListOf<String>()
var currentField = ""
var inQuotes = false

for (char in line) {
if (inQuotes) {
if (char == '"') {
inQuotes = false
fieldsList.add(currentField)
currentField = ""
} else {
currentField += char
}
} else {
if (char == '"') {
inQuotes = true
} else if (char == ',') {
fieldsList.add(currentField.trim('\"'))
currentField = ""
} else {
currentField += char
}
}
}

fieldsList.add(currentField.trim('\"'))

occupancyList.add(
Occupancy(
tripId = fieldsList[0],
stopSequence = fieldsList[1],
occupancyStatus = fieldsList[2],
monday = fieldsList[3],
tuesday = fieldsList[4],
wednesday = fieldsList[5],
thursday = fieldsList[6],
friday = fieldsList[7],
saturday = fieldsList[8],
sunday = fieldsList[9],
startDate = fieldsList[10],
endDate = fieldsList[11],
exception = fieldsList[11],
)
)
}
}
} catch (e: IOException) {
e.printStackTrace()
Timber.e(e, "readStopsFromCSV: ")
} catch (e: IllegalArgumentException) {
e.printStackTrace()
Timber.e(e, "readStopsFromCSV: ")
}

return occupancyList
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import kotlinx.coroutines.withContext
import okhttp3.Response
import timber.log.Timber
import xyz.ksharma.krail.data.cacheZipResponse
import xyz.ksharma.krail.data.gtfs_static.parser.OccupancyParser.parseOccupancy
import xyz.ksharma.krail.data.gtfs_static.parser.RouteParser.parseRoutes
import xyz.ksharma.krail.data.gtfs_static.parser.StopTimesParser.parseStopTimes
import xyz.ksharma.krail.data.gtfs_static.parser.StopsParser.parseStops
Expand All @@ -33,9 +34,11 @@ class SydneyTrainsRepositoryImpl @Inject constructor(
//val stopsList = context.toPath(GTFSFeedFileNames.STOPS.fileName).parseStops()
//Timber.d("stopsList: $stopsList")
//val tripsList = context.toPath(GTFSFeedFileNames.TRIPS.fileName).parseTrips()
val stopTimesList = context.toPath(GTFSFeedFileNames.STOP_TIMES.fileName).parseStopTimes()
//val stopTimesList = context.toPath(GTFSFeedFileNames.STOP_TIMES.fileName).parseStopTimes()
//Timber.d("stopTimesList: ${stopTimesList.size}") Huge data do not log.
val routesList = context.toPath(GTFSFeedFileNames.ROUTES.fileName).parseRoutes()
//val routesList = context.toPath(GTFSFeedFileNames.ROUTES.fileName).parseRoutes()
// Timber.d("routesList: $routesList")
val occupancyList = context.toPath(GTFSFeedFileNames.OCCUPANCIES.fileName).parseOccupancy()
Timber.d("occupancyList: ${occupancyList.size}")
}
}

0 comments on commit addfeac

Please sign in to comment.