static void Main(string[] args) { // Définition des éléments de position de la CCI string longitude = "5.724524"; string latitude = "45.188529"; //string longitude = "5.726744267129334"; //string latitude = "45.18521853612248"; int distance = 400; // Périmètre de recherche autour de la CCI // Récupération des données des arrêts et appel de la méthode qui retire les doublons dans le dictionaire DataBusStation liste = new DataBusStation(new Connexion()); Dictionary <string, List <string> > dicoStation = liste.dicoCreateAndClean(latitude, longitude, distance); // Récupération des données des lignes DataLineDetails dataLineDetails = new DataLineDetails(new Connexion()); //Console.WriteLine(dataLineDetails.GetLineDetailsObject("SEM:12").color);// test d'affichage depuis l'API des lignes //affichage du dictionnaire Console.WriteLine("Liste des transports de l'aglomération autour de la CCI :" + "\n"); foreach (KeyValuePair <string, List <string> > kvp in dicoStation) { Console.WriteLine("*****************************************************************"); Console.WriteLine(" Arret = " + kvp.Key); Console.WriteLine("*****************************************************************\n"); foreach (string line in kvp.Value) { Console.WriteLine(" Ligne = " + dataLineDetails.GetLineDetailsObject(line).shortName); Console.WriteLine(" Nom = " + dataLineDetails.GetLineDetailsObject(line).longName); Console.WriteLine(" Couleur = " + dataLineDetails.GetLineDetailsObject(line).color + "\n"); } } }
public void GetLineDetailsObjectTest() { FakeConnexionApi fake = new FakeConnexionApi(); // Instancie une nouvelle FakeConnexion fake.resultatJson = Resource1.JsonDetailLine; // Récupère les fake données dans les ressources DataLineDetails dataLineDetails = new DataLineDetails(fake); // Connexion factice avec les données d'une ligne LineDetailsObject resultat = dataLineDetails.GetLineDetailsObject("SEM:12"); // Crée la liste correspondant à la ligne SEM:12 Assert.AreEqual(resultat.shortName, "12"); // Test si le nom court est 12 Assert.IsTrue(resultat.color.Contains("009930")); // Test la couleur Assert.IsTrue(resultat.longName.Contains("Eybens Maisons Neuves")); // Test le nom complet de la ligne }
private static void AddLineToTracking(SqlConnection database, SqlInt32 fileId, int lineNumber, DataLineDetails lineType, string[] tokens) { try { int inc1 = 0; //additional increment for lines that have a data attribute int inc2 = 0; //additional increment for lines that have a sensor attribute int inc3 = 0; //additional increment for lines that have a stop date var startDate = ParseSrx400DateTime(tokens[0] + " " + tokens[1], lineNumber); string data = null; if ((lineType & DataLineDetails.HasDataAttribute) == DataLineDetails.HasDataAttribute) { data = tokens[6]; inc1 = 1; } if ((lineType & DataLineDetails.HasSensorAttribute) == DataLineDetails.HasSensorAttribute) { data = tokens[6 + inc1]; inc2 = 1; } DateTime?stopDate = null; if ((lineType & DataLineDetails.HeaderHasStopDate) == DataLineDetails.HeaderHasStopDate && (lineType & DataLineDetails.GpsModeIsOn) == 0) { stopDate = ParseSrx400DateTime(tokens[7 + inc1 + inc2] + " " + tokens[8 + inc1 + inc2], lineNumber); inc3 = 2; } var latLong = new Location { Lat = null, Long = null }; if ((lineType & DataLineDetails.HeaderHasLatLong) == DataLineDetails.HeaderHasLatLong && (lineType & DataLineDetails.GpsModeIsOn) == DataLineDetails.GpsModeIsOn) { latLong = ParseSrx400LatLong(tokens.Skip(7 + inc1 + inc2 + inc3).ToArray(), lineNumber); } const string sql = "INSERT INTO [dbo].[TelemetryDataSRX400TrackingData] (FileId, LineNumber, Date, Channel, Code, Antenna, Power, Data, Sensor, Events, Latitude, Longitude, StopDate)" + " VALUES (@FileId, @LineNumber, @Date, @Channel, @Code, @Antenna, @Power, @Data, @Sensor, @Events, @Latitude, @Longitude, @StopDate)"; using (var command = new SqlCommand(sql, database)) { command.Parameters.Add(new SqlParameter("@FileId", SqlDbType.Int) { Value = fileId }); command.Parameters.Add(new SqlParameter("@LineNumber", SqlDbType.Int) { Value = lineNumber }); command.Parameters.Add(new SqlParameter("@Date", SqlDbType.DateTime2) { Value = startDate }); command.Parameters.Add(new SqlParameter("@Channel", SqlDbType.Int) { Value = Int32.Parse(tokens[2]) }); command.Parameters.Add(new SqlParameter("@Code", SqlDbType.Int) { Value = Int32.Parse(tokens[3]) }); command.Parameters.Add(new SqlParameter("@Antenna", SqlDbType.NVarChar) { Value = tokens[4] }); command.Parameters.Add(new SqlParameter("@Power", SqlDbType.Int) { Value = Int32.Parse(tokens[5]) }); command.Parameters.Add(new SqlParameter("@Data", SqlDbType.NVarChar) { IsNullable = true, Value = data }); command.Parameters.Add(new SqlParameter("@Sensor", SqlDbType.NVarChar) { IsNullable = true, Value = data }); command.Parameters.Add(new SqlParameter("@Events", SqlDbType.Int) { Value = Int32.Parse(tokens[6 + inc1 + inc2]) }); command.Parameters.Add(new SqlParameter("@Latitude", SqlDbType.Real) { IsNullable = true, Value = latLong.Lat }); command.Parameters.Add(new SqlParameter("@Longitude", SqlDbType.Real) { IsNullable = true, Value = latLong.Long }); command.Parameters.Add(new SqlParameter("@StopDate", SqlDbType.DateTime) { IsNullable = true, Value = stopDate }); command.ExecuteNonQuery(); } } catch (IndexOutOfRangeException) { throw new FormatException("Unexpected token count (" + tokens.Length + ") in line " + lineNumber + ". Flags = " + lineType); } }
public void ParseFileIntoDatabase(SqlInt32 fileId, SqlConnection database) { ClearDatabase(database, fileId); var state = ParseState.Start; var changeDateTime = new DateTime(); int changeLineNumber = 0; bool haveScanTable = false; DataLineDetails lineType = 0; var environment = new Dictionary <string, string>(); int lineNumber = 2; foreach (var line in GetLines(_bytes).Skip(lineNumber)) { lineNumber++; switch (state) { case ParseState.Start: if (line.StartsWith("changed: ")) { changeDateTime = ParseSrx400DateTime(line.Substring(9), lineNumber); changeLineNumber = lineNumber; state = ParseState.ChangeSet; } else { throw new InvalidDataException("File does not begin with a change set date"); } break; case ParseState.ChangeSet: if (line == String.Empty) { continue; } if (line.Trim() == "ANTENNA GROUP:") { state = ParseState.AntennaGroup; break; } if (line.Trim() == "HYDROPHONE GROUP:") { state = ParseState.HydrophoneGroup; break; } if (line.Trim() == "Active scan_table:") { state = ParseState.ScanTable; break; } if (line.StartsWith("Filter:")) { ParseKeyValue(line, environment); if (line.StartsWith("Filter: Channel & Code")) { state = ParseState.FilterDetails; } break; } if (line.StartsWith("GPS data mode =")) { state = ParseState.GpsMode; ParseKeyValue(line, environment); break; } if (line.StartsWith("changed: ")) { WriteEnvironmentToDatabase(database, fileId, changeLineNumber, changeDateTime, environment); environment.Clear(); changeDateTime = ParseSrx400DateTime(line.Substring(9), lineNumber); changeLineNumber = lineNumber; break; } if (line.Trim() == "Code_log data:") { lineType = 0; WriteEnvironmentToDatabase(database, fileId, changeLineNumber, changeDateTime, environment); if (!haveScanTable) { throw new FormatException("No scan table found before the data table"); } state = ParseState.DataTable; break; } if (!ParseKeyValue(line, environment)) { throw new FormatException("Unrecognized environment parameter in file at line " + lineNumber); } break; case ParseState.AntennaGroup: if (line == String.Empty) { state = ParseState.AntennaDetails; break; } if (line.StartsWith("Antenna Gain")) { continue; } AddLineToAntennas(database, fileId, lineNumber, changeDateTime, "Antenna", line.Trim().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)); break; case ParseState.AntennaDetails: if (line == String.Empty) { state = ParseState.ChangeSet; break; } if (!ParseAntennaKeyValue(line, "Antenna", environment)) { throw new FormatException("Unrecognized antenna parameter in file at line " + lineNumber); } break; case ParseState.HydrophoneGroup: if (line == String.Empty) { state = ParseState.HydrophoneDetails; break; } if (line.StartsWith("Hydrophone Gain")) { continue; } AddLineToAntennas(database, fileId, lineNumber, changeDateTime, "Hydrophone", line.Trim().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)); break; case ParseState.HydrophoneDetails: if (line == String.Empty) { state = ParseState.ChangeSet; break; } if (!ParseAntennaKeyValue(line, "Hydrophone", environment)) { throw new FormatException("Unrecognized hydrophone parameter in file at line " + lineNumber); } break; case ParseState.FilterDetails: if (line == String.Empty) { state = ParseState.ChangeSet; break; } AddLineToFilters(database, fileId, lineNumber, changeDateTime, line.Trim().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)); break; case ParseState.GpsMode: if (line == String.Empty) { state = ParseState.ChangeSet; break; } if (line == "Reference position" || line == " Latitude Longitude") { continue; } AddLineToLocations(database, fileId, lineNumber, changeDateTime, line); break; case ParseState.ScanTable: if (line == String.Empty) { state = ParseState.ChangeSet; break; } if (line.Trim() == "CHANNEL FREQUENCY") { continue; } AddLineToChannels(database, fileId, lineNumber, changeDateTime, line.Trim().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)); haveScanTable = true; break; case ParseState.DataTable: if (line == String.Empty) { state = ParseState.End; break; } var tokens = line.Trim().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (tokens.Length == 2 && tokens[0] == "Start") { lineType = lineType | DataLineDetails.HeaderHasStopDate; continue; } if (tokens.Length == 2 && tokens[0] == "Latitude") { lineType = lineType | DataLineDetails.HeaderHasLatLong; continue; } if (tokens[0] == "Date") { if (tokens[6] == "Data") { lineType = lineType | DataLineDetails.HasDataAttribute; } if (tokens[6] == "Sensor" || tokens[7] == "Sensor") { lineType = lineType | DataLineDetails.HasSensorAttribute; } if (tokens[tokens.Length - 1] == "Longitude") { lineType = lineType | DataLineDetails.HeaderHasLatLong; } break; } if (tokens.Length > 2 && tokens[2] == "Battery") { AddLineToBatteryStatus(database, fileId, lineNumber, ParseSrx400DateTime(tokens[0] + " " + tokens[1], lineNumber), tokens[3]); break; } if (tokens[0] == "GPS") { if (tokens[3] == "OFF") { if ((lineType & DataLineDetails.GpsModeIsOn) == DataLineDetails.GpsModeIsOn) { lineType = lineType ^ DataLineDetails.GpsModeIsOn; } continue; } if (tokens[3] == "ON") { AddLineToLocations(database, fileId, lineNumber, null, String.Join(" ", tokens.Skip(6).ToArray())); lineType = lineType | DataLineDetails.GpsModeIsOn; } else { throw new FormatException("Unexpected GPS data mode in data table at line " + lineNumber); } break; } AddLineToTracking(database, fileId, lineNumber, lineType, tokens); break; case ParseState.End: if (line != String.Empty) { throw new InvalidDataException("Unexpected text after the data table at line " + lineNumber); } break; default: throw new InvalidOperationException("Unhandled ParseState: " + state); } } if (state != ParseState.End && state != ParseState.DataTable) { throw new InvalidDataException("Data file ended prematurely"); } }
private static void AddLineToTracking(SqlConnection database, SqlInt32 fileId, int lineNumber, DataLineDetails lineType, string[] tokens) { try { int inc1 = 0; //additional increment for lines that have a data attribute int inc2 = 0; //additional increment for lines that have a sensor attribute int inc3 = 0; //additional increment for lines that have a stop date var startDate = ParseSrx400DateTime(tokens[0] + " " + tokens[1], lineNumber); string data = null; if ((lineType & DataLineDetails.HasDataAttribute) == DataLineDetails.HasDataAttribute) { data = tokens[6]; inc1 = 1; } if ((lineType & DataLineDetails.HasSensorAttribute) == DataLineDetails.HasSensorAttribute) { data = tokens[6+inc1]; inc2 = 1; } DateTime? stopDate = null; if ((lineType & DataLineDetails.HeaderHasStopDate) == DataLineDetails.HeaderHasStopDate && (lineType & DataLineDetails.GpsModeIsOn) == 0) { stopDate = ParseSrx400DateTime(tokens[7 + inc1 + inc2] + " " + tokens[8 + inc1 + inc2], lineNumber); inc3 = 2; } var latLong = new Location { Lat = null, Long = null }; if ((lineType & DataLineDetails.HeaderHasLatLong) == DataLineDetails.HeaderHasLatLong && (lineType & DataLineDetails.GpsModeIsOn) == DataLineDetails.GpsModeIsOn) { latLong = ParseSrx400LatLong(tokens.Skip(7 + inc1 + inc2 + inc3).ToArray(), lineNumber); } const string sql = "INSERT INTO [dbo].[TelemetryDataSRX400TrackingData] (FileId, LineNumber, Date, Channel, Code, Antenna, Power, Data, Sensor, Events, Latitude, Longitude, StopDate)" + " VALUES (@FileId, @LineNumber, @Date, @Channel, @Code, @Antenna, @Power, @Data, @Sensor, @Events, @Latitude, @Longitude, @StopDate)"; using (var command = new SqlCommand(sql, database)) { command.Parameters.Add(new SqlParameter("@FileId", SqlDbType.Int) { Value = fileId }); command.Parameters.Add(new SqlParameter("@LineNumber", SqlDbType.Int) { Value = lineNumber }); command.Parameters.Add(new SqlParameter("@Date", SqlDbType.DateTime2) { Value = startDate }); command.Parameters.Add(new SqlParameter("@Channel", SqlDbType.Int) { Value = Int32.Parse(tokens[2]) }); command.Parameters.Add(new SqlParameter("@Code", SqlDbType.Int) { Value = Int32.Parse(tokens[3]) }); command.Parameters.Add(new SqlParameter("@Antenna", SqlDbType.NVarChar) { Value = tokens[4] }); command.Parameters.Add(new SqlParameter("@Power", SqlDbType.Int) { Value = Int32.Parse(tokens[5]) }); command.Parameters.Add(new SqlParameter("@Data", SqlDbType.NVarChar) { IsNullable = true, Value = data }); command.Parameters.Add(new SqlParameter("@Sensor", SqlDbType.NVarChar) { IsNullable = true, Value = data }); command.Parameters.Add(new SqlParameter("@Events", SqlDbType.Int) { Value = Int32.Parse(tokens[6 + inc1 + inc2]) }); command.Parameters.Add(new SqlParameter("@Latitude", SqlDbType.Real) { IsNullable = true, Value = latLong.Lat }); command.Parameters.Add(new SqlParameter("@Longitude", SqlDbType.Real) { IsNullable = true, Value = latLong.Long }); command.Parameters.Add(new SqlParameter("@StopDate", SqlDbType.DateTime) { IsNullable = true, Value = stopDate }); command.ExecuteNonQuery(); } } catch (IndexOutOfRangeException) { throw new FormatException("Unexpected token count ("+tokens.Length+") in line "+lineNumber +". Flags = "+ lineType); } }