// POST: api/GpsData public HttpResponseMessage Post([FromBody] GpsData values) { HttpResponseMessage answer = null; Response response = new Response(); try { int index = GpsDataDB.gpsDataAdd(values); if (index > 0) { response.code = 1; response.message = "Guardado"; } else { response.code = 0; response.message = "NO Guardado"; } answer = Request.CreateResponse(response); } catch (Exception ex) { response.code = -1; response.message = ex.ToString(); answer = Request.CreateResponse(response); } return(answer); }
// PUT: api/GpsData/ public HttpResponseMessage Put([FromBody] GpsData values) { HttpResponseMessage answer = null; Response response = new Response(); try { int rowCount = GpsDataDB.gpsDataUpdate(values); if (rowCount > 0) { response.code = 1; response.message = "Actualizado"; } else { response.code = 0; response.message = "NO Actualizado"; } answer = Request.CreateResponse(response); } catch (Exception ex) { response.code = -1; response.message = ex.ToString(); answer = Request.CreateResponse(response); } return(answer); }
private IEnumerable <GpxTrack> SerializeTracks(GpsData data) { foreach (var track in data.Tracks) { var trk = new GpxTrack(); SerializeTrackMetadata(track, trk, x => x.Name, (gpx, s) => gpx.name = s); SerializeTrackMetadata(track, trk, x => x.Description, (gpx, s) => gpx.desc = s); SerializeTrackMetadata(track, trk, x => x.Comment, (gpx, s) => gpx.cmt = s); trk.trkseg = new GpxTrackSegment[track.Segments.Count]; for (var i = 0; i < track.Segments.Count; i++) { var segment = track.Segments[i]; var pts = new GpxWaypoint[segment.Fixes.Count]; for (var j = 0; j < segment.Fixes.Count; j++) { pts[j] = new GpxWaypoint { lat = (decimal)segment.Fixes[j].Coordinate.Latitude, lon = (decimal)segment.Fixes[j].Coordinate.Longitude, ele = segment.Fixes[j].Coordinate.Is3D ? (decimal)((Is3D)segment.Fixes[j].Coordinate).Elevation : 0m }; } trk.trkseg[i] = new GpxTrackSegment { trkpt = pts }; } yield return(trk); } }
private static void ParseTracks(GpxFile xml, GpsData data) { if (xml.trk != null) { foreach (var trkType in xml.trk) { var track = new Track(); track.Metadata.Attribute(x => x.Name, trkType.name); track.Metadata.Attribute(x => x.Description, trkType.desc); track.Metadata.Attribute(x => x.Comment, trkType.cmt); foreach (var trksegType in trkType.trkseg) { var segment = new TrackSegment(); foreach (var wptType in trksegType.trkpt) { var fix = new Fix((double)wptType.lat, (double)wptType.lon, (double)wptType.ele, wptType.time); segment.Fixes.Add(fix); } track.Segments.Add(segment); } data.Tracks.Add(track); } } }
public async Task <IActionResult> Edit(string id, [Bind("Id,Latitude,Lontitude,Satellite,Battery")] GpsData gpsData) { if (id != gpsData.Id) { return(NotFound()); } if (ModelState.IsValid) { try { _context.Update(gpsData); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!GpsDataExists(gpsData.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View(gpsData)); }
static apollo.common.Point3D ConvertToPoint(GpsData g) { return(new apollo.common.Point3D() { x = g.Easting, y = g.Northing, z = g.Altitude }); }
public GpsData GetLastGpsData() { GpsData gpsData = null; try { lock (lockGPS) { if (listGpsData.Count > 0) { gpsData = listGpsData[listGpsData.Count - 1]; } else { logger.ErrorFormat("GetLastGpsData failed, listGpsData is null"); } } } catch (Exception e) { logger.ErrorFormat("catch an error : {0}", e.Message); } return(gpsData); }
//获取采样数据 public void RecvData(ref GpsData data) { try { lock (lockObj) { data.Sd = gpsData.Sd; data.Jd = gpsData.Jd; data.Wd = gpsData.Wd; data.Fxj = gpsData.Fxj; data.Fyj = gpsData.Fyj; data.Hgj = gpsData.Hgj; data.Gd = gpsData.Gd; data.Clqy = gpsData.Clqy; data.Ctqy = gpsData.Ctqy; data.Qjjl = gpsData.Qjjl; data.Htjl = gpsData.Htjl; data.Zt = gpsData.Zt; } } catch (Exception e) { logger.ErrorFormat("catch an error : {0}", e.Message); } }
private static void ParseTracks(GpxFile xml, GpsData data) { if (xml.trk != null) { foreach (var trkType in xml.trk) { var track = new Track(); track.Metadata.Attribute(x => x.Name, trkType.name); track.Metadata.Attribute(x => x.Description, trkType.desc); track.Metadata.Attribute(x => x.Comment, trkType.cmt); foreach (var trksegTrkpt in trkType.trkseg.Where(seg => seg.trkpt != null)) { var segment = new TrackSegment(); foreach (var wptType in trksegTrkpt.trkpt) { segment.Waypoints.Add(ConvertWaypoint(wptType)); } track.Segments.Add(segment); } data.Tracks.Add(track); } } }
private IEnumerable <GpxTrack> SerializeTracks(GpsData data) { foreach (var track in data.Tracks) { var trk = new GpxTrack(); SerializeTrackMetadata(track, trk, x => x.Name, (gpx, s) => gpx.name = s); SerializeTrackMetadata(track, trk, x => x.Description, (gpx, s) => gpx.desc = s); SerializeTrackMetadata(track, trk, x => x.Comment, (gpx, s) => gpx.cmt = s); trk.trkseg = new GpxTrackSegment[track.Segments.Count]; for (var i = 0; i < track.Segments.Count; i++) { var segment = track.Segments[i]; var pts = new GpxTrackPoint[segment.Waypoints.Count]; for (var j = 0; j < segment.Waypoints.Count; j++) { pts[j] = ConvertToGpxTrackPoint(segment.Waypoints[j]); } trk.trkseg[i] = new GpxTrackSegment { trkpt = pts }; } yield return(trk); } }
public string Serialize(GpsData data) { var textWriter = new EncodingStringWriter(Encoding.UTF8); _xmlSerializer.Serialize(textWriter, SerializeInternal(data)); return(textWriter.ToString()); }
public async Task <IActionResult> PutGpsData([FromRoute] string id, [FromBody] GpsData gpsData) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != gpsData.Id) { return(BadRequest()); } _context.Entry(gpsData).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!GpsDataExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }
private void OnScanComplete(IEnumerable <NetworkData> data, GpsData gpsData) { if (ScanComplete != null) { ScanComplete(this, new ScanCompleteEventArgs(data.ToArray(), gpsData)); } }
public static List <GpsData> GetList_Car(string cldwzdsbh, DateTime stTime, DateTime endTime) { StringBuilder pSBQueryText = new StringBuilder(); pSBQueryText.Append("SELECT LONGITUDE_BAIDU,LATITUDE_BAIDU,PASSTIME FROM GPS_VEHICLEDATA A LEFT JOIN CFG_VEHICLEINFO B ON A.VEHID=B.ID WHERE A.PASSTIME BETWEEN TO_DATE('" + stTime.ToString("yyyy-MM-dd HH:mm:ss") + "','yyyy-mm-dd hh24:mi:ss') AND TO_DATE('" + endTime.ToString("yyyy-MM-dd HH:mm:ss") + "','yyyy-mm-dd hh24:mi:ss') "); if (string.IsNullOrWhiteSpace(cldwzdsbh) == false) { pSBQueryText.Append("AND B.CLDWZDSBH='" + cldwzdsbh + "' "); } pSBQueryText.Append(" ORDER BY A.PASSTIME DESC"); var data = OracleOperateBLL.FillDataTable(pSBQueryText.ToString()); List <GpsData> gpsDataList = new List <GpsData>(); foreach (DataRow dr in data.Rows) { GpsData d = new GpsData(); //d.Address = dr["ADDRESS"].ToString(); d.Create_Time = DateTime.Parse(dr["PASSTIME"].ToString()).ToString("yyyy-MM-dd HH:mm:ss"); d.Lat = Convert.ToDecimal(dr["LATITUDE_BAIDU"]).ToString("f6"); d.Lon = Convert.ToDecimal(dr["LONGITUDE_BAIDU"]).ToString("f6"); gpsDataList.Add(d); } return(gpsDataList); }
/// <summary> /// Clones and then adds data to this AP /// </summary> /// <param name="data">The data to add</param> /// <param name="gpsData">The GPS data to go with</param> public void AddData(NetworkData data, GpsData gpsData) { if (data == null) { throw new ArgumentNullException("data"); } if (gpsData == null) { throw new ArgumentNullException("gpsData"); } NetworkData nd2 = (NetworkData)data.Clone(); lock (MyNetworkDataCollection) { //Check if the RSSI had been consistently stronger and stronger than the strongest reading before updating the GPS data //This means if this reading and the last reading are both higher than 2 readings ago, update the GPS data if ((MyNetworkDataCollection.Count > 1 && nd2.Rssi > MyNetworkDataCollection.Max(nd => nd.Rssi) && (nd2.Rssi > MyNetworkDataCollection[MyNetworkDataCollection.Count - 2].Rssi && MyNetworkDataCollection[MyNetworkDataCollection.Count - 1].Rssi > MyNetworkDataCollection[MyNetworkDataCollection.Count - 2].Rssi)) || (nd2.Rssi > -100 && GpsData.SatelliteTime == DateTime.MinValue)) { //Update GPS data GpsData = gpsData; } //Add the data MyNetworkDataCollection.Add(nd2); } Timestamp = nd2.MyTimestamp; LastSeenTimestamp = nd2.MyTimestamp; //Remove old data, if any DeleteOldData(Timestamp - TimeSpan.FromMinutes(8)); }
public static List <GpsData> GetList_User(string telephone, DateTime stTime, DateTime endTime) { StringBuilder pSBQueryText = new StringBuilder(); pSBQueryText.Append("SELECT LON,LAT,CREATE_TIME,ADDRESS FROM GPS_DATA WHERE CREATE_TIME BETWEEN TO_DATE('" + stTime.ToString("yyyy-MM-dd HH:mm:ss") + "','yyyy-mm-dd hh24:mi:ss') AND TO_DATE('" + endTime.ToString("yyyy-MM-dd HH:mm:ss") + "','yyyy-mm-dd hh24:mi:ss') "); if (string.IsNullOrWhiteSpace(telephone) == false) { pSBQueryText.Append("AND PHONE='" + telephone + "' "); } pSBQueryText.Append(" ORDER BY CREATE_TIME"); var data = OracleOperateBLL.FillDataTable(pSBQueryText.ToString()); List <GpsData> gpsDataList = new List <GpsData>(); foreach (DataRow dr in data.Rows) { GpsData d = new GpsData(); d.Address = dr["ADDRESS"].ToString(); d.Create_Time = DateTime.Parse(dr["CREATE_TIME"].ToString()).ToString("yyyy-MM-dd HH:mm:ss"); var lonAndLat = GpsTranslate.gcj2bd(Convert.ToDouble(dr["LAT"].ToString()), Convert.ToDouble(dr["LON"].ToString())); d.Lat = lonAndLat[0].ToString(); d.Lon = lonAndLat[1].ToString(); gpsDataList.Add(d); } return(gpsDataList); }
public void findNearPOIFromGpx(string trkFile, string poiFile) { try { GpxResult res = GpsData.findPoiNearGpxTracks(trkFile, poiFile); if (res.GPX == null) { string msg = "Find Near POI to GPX tracks/routes failed" + NL + " " + res.Message; raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.MSG, NL + msg)); return; } gpx poiNear = res.GPX; string saveFileName = getSaveName(poiFile, ".foundnear"); if (saveFileName != null) { poiNear.Save(saveFileName); string msg = "Find Near POI to GPX tracks/routes:" + NL + " Tracks/routes file=" + trkFile + NL + " POI file=" + poiFile + NL + " Output=" + saveFileName + NL + " " + res.Message; raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.MSG, NL + msg)); } else { return; } } catch (Exception ex) { string msg = "Error finding Near POI from GPX"; raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.EXC, msg, ex)); return; } }
/// <summary> /// Saves all dynamic and global gpss to the save data. /// </summary> public override void SaveData() { MyObjectBuilder_GpsManager builder = new MyObjectBuilder_GpsManager(); foreach (var gps in Gpss) { GpsData data = new GpsData(); data.color = gps.GPSColor.ToVector3(); data.name = gps.Name; data.position = gps.Coords; builder.Gpss.Add(data); } foreach (var gps in DynamicGpss) { DynamicGpsData data = new DynamicGpsData(); data.playerId = gps.Key.playerId; data.gpsName = gps.Key.gpsName; data.gpsHash = gps.Value; builder.DynamicGpss.Add(data); } FileUtils.WriteXmlFileToWorld(builder, FILENAME, typeof(GlobalGpsManager)); }
public void deleteTcxTrackpoints(string tcxFile) { try { TcxResult res = GpsData.deleteTcxTrackpoints(tcxFile); if (res.TCX == null) { string msg = "Delete trackpoints from TCX failed:" + NL + "for " + Path.GetFileName(tcxFile) + NL + res.Message; raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.ERR, msg)); return; } string saveFileName = getSaveName(tcxFile, ".trimmed"); if (saveFileName != null) { res.TCX.Save(saveFileName); string msg = "Delete TCX Trackpoints: Trimmed " + tcxFile + NL + " Output is " + saveFileName + NL + " " + res.Message; raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.MSG, NL + msg)); } else { return; } } catch (Exception ex) { string msg = "Error deleting trackpoints from TCX"; raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.EXC, msg, ex)); return; } }
protected void Dispose(bool disposing) { if (disposing) { if (!this.disposed) { if (this.agency != null) { this.agency.Dispose(); } this.agency = null; if (this.client != null) { this.client.Dispose(); } this.client = null; if (this.eventPacket != null) { this.eventPacket.Dispose(); } this.eventPacket = null; if (this.gpsData != null) { this.gpsData.Dispose(); } this.gpsData = null; this.disposed = true; } } }
public void changeTimesTcx(string tcxFile) { try { TcxResult res = GpsData.changeTimesTcx(tcxFile); if (res.TCX == null) { string msg = "Change times in TCX failed:" + NL + "for " + Path.GetFileName(tcxFile) + NL + res.Message; raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.ERR, msg)); return; } string saveFileName = getSaveName(tcxFile, ".timechange"); if (saveFileName != null) { res.TCX.Save(saveFileName); string msg = "Change TCX Times: Changed times in " + tcxFile + NL + " Output is " + saveFileName + NL + " " + res.Message; raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.MSG, NL + msg)); } else { return; } } catch (Exception ex) { string msg = "Error changing times in TCX"; raiseGpxTcxEvent(new GpxTcxEventArgs(EventType.EXC, msg, ex)); return; } }
public static Ros.NavSatFix ConvertFrom(GpsData data) { return(new Ros.NavSatFix() { header = new Ros.Header() { stamp = Convert(data.Time), frame_id = data.Frame, }, status = new Ros.NavSatStatus() { status = Ros.NavFixStatus.STATUS_FIX, service = Ros.GpsServisType.SERVICE_GPS, }, latitude = data.Latitude, longitude = data.Longitude, altitude = data.Altitude, position_covariance = new double[] { 0.0001, 0, 0, 0, 0.0001, 0, 0, 0, 0.0001, }, position_covariance_type = Ros.CovarianceType.COVARIANCE_TYPE_DIAGONAL_KNOWN }); }
public static void LnglatToTilePixelOffset(int zoom, GpsData lnglat, out Vector2 offset) { double n = Math.Pow(2, zoom); double tileX = ((lnglat.Longitude + 180) / 360) * n; double tileY = (1 - (Math.Log(Math.Tan(Mathf.Deg2Rad * lnglat.Latitude) + (1 / Math.Cos(Mathf.Deg2Rad * lnglat.Latitude))) / Math.PI)) / 2 * n; offset = new Vector2((float)(tileX - (int)tileX), (float)(tileY - (int)tileY)); }
private static void ParseMetadata(GpxFile xml, GpsData data) { data.Metadata.Attribute(x => x.Software, xml.creator); if (xml.metadata != null) { data.Metadata.Attribute(x => x.Name, xml.metadata.name); data.Metadata.Attribute(x => x.Description, xml.metadata.desc); data.Metadata.Attribute(x => x.Keywords, xml.metadata.keywords); if (xml.metadata.link != null && xml.metadata.link.Length > 0) { data.Metadata.Attribute(x => x.Link, xml.metadata.link[0].href); } if (xml.metadata.author != null) { data.Metadata.Attribute(x => x.Author.Name, xml.metadata.author.name); if (xml.metadata.author.email != null) { data.Metadata.Attribute(x => x.Author.Email, xml.metadata.author.email.id + "@" + xml.metadata.author.email.domain); } if (xml.metadata.author.link != null) { data.Metadata.Attribute(x => x.Author.Link, xml.metadata.author.link.href); } } if (xml.metadata.copyright != null) { data.Metadata.Attribute(x => x.Copyright.Author, xml.metadata.copyright.author); data.Metadata.Attribute(x => x.Copyright.License, xml.metadata.copyright.license); data.Metadata.Attribute(x => x.Copyright.Year, xml.metadata.copyright.year); } } }
public string Serialize(GpsData data) { var textWriter = new StringWriterUtf8(); _xmlSerializer.Serialize(textWriter, SerializeInternal(data)); return(textWriter.ToString()); }
public GpsData DeSerialize(StreamWrapper streamWrapper) { var data = new GpsData(); var trackSegment = new TrackSegment(); streamWrapper.Position = 0; using (var reader = new StreamReader(streamWrapper)) { string line; while ((line = reader.ReadLine()) != null) { if (ParseFix(line, trackSegment)) { continue; } if (ParseWaypoint(line, data)) { continue; } } } if (!trackSegment.IsEmpty()) { data.Tracks.Add(new Track()); data.Tracks[0].Segments.Add(trackSegment); } return(data); }
private void button1_Click(object sender, EventArgs e) { try { GpsData gpsData = null; GpsService gpsService = new GpsService(); gpsService.Initialize("COM3"); while (gpsData == null) { if (gpsService.ReadData() != null) { gpsData = new GpsData(); gpsData = gpsService.ReadData(); if (gpsData != null) { richTextBox1.Text = "lat:\t" + gpsData.Latitude + "\n" + "lon:\t" + gpsData.Longitude + "\n"; } } } } catch (Exception ex) { richTextBox1.Text = ex.Message; } }
private void writeWeeklyReportData(StreamWriter sw, int curYear, string curMonth, int curWeek, DateTime curStartOfWeek, TimeSpan totalWalkingDuration, double totalWalkingDistance, TimeSpan totalCyclingDuration, double totalCyclingDistance, TimeSpan totalWorkoutDuration, double totalWorkoutDistance, TimeSpan totalOtherDuration, double totalOtherDistance, TimeSpan totalDuration, double totalDistance) { sw.Write(curYear + CSV_SEP); // year sw.Write(curMonth + CSV_SEP); // month sw.Write(curWeek + CSV_SEP); // week sw.Write($"{GpsData.formatTimeWeekday(curStartOfWeek)}" + CSV_SEP); sw.Write($"{GpsData.formatDuration(totalWalkingDuration)}" + CSV_SEP + $"{GpsData.formatDurationMinutes(totalWalkingDuration)}" + CSV_SEP + $"{GpsData.M2MI * totalWalkingDistance:f1}" + CSV_SEP); sw.Write($"{GpsData.formatDuration(totalCyclingDuration)}" + CSV_SEP + $"{GpsData.formatDurationMinutes(totalCyclingDuration)}" + CSV_SEP + $"{GpsData.M2MI * totalCyclingDistance:f1}" + CSV_SEP); sw.Write($"{GpsData.formatDuration(totalWorkoutDuration)}" + CSV_SEP + $"{GpsData.formatDurationMinutes(totalWorkoutDuration)}" + CSV_SEP + $"{GpsData.M2MI * totalWorkoutDistance:f1}" + CSV_SEP); sw.Write($"{GpsData.formatDuration(totalOtherDuration)}" + CSV_SEP + $"{GpsData.formatDurationMinutes(totalOtherDuration)}" + CSV_SEP + $"{GpsData.M2MI * totalOtherDistance:f1}" + CSV_SEP); sw.Write($"{GpsData.formatDuration(totalDuration)}" + CSV_SEP + $"{GpsData.formatDurationMinutes(totalDuration)}" + CSV_SEP + $"{GpsData.M2MI * totalDistance:f1}" + CSV_SEP); sw.Write(NL); }
protected override GpsData DeSerialize(SkyDemonFlightplan xml) { if (xml == null) { return(null); } //N514807.00 W0000930.00 var data = new GpsData(); if (xml.PrimaryRoute != null) { data.Routes.Add(ConvertRoute(xml.PrimaryRoute)); } if (xml.Routes != null) { foreach (var route in xml.Routes) { data.Routes.Add(ConvertRoute(route)); } } if (xml.Aircraft != null && xml.Aircraft.Length > 0) { data.Metadata.Attribute(x => x.Vehicle.Identifier, xml.Aircraft[0].Registration); data.Metadata.Attribute(x => x.Vehicle.Model, xml.Aircraft[0].Type); } return(data); }
static Apollo.Point3D ConvertToApolloPoint(GpsData g) { return(new Apollo.Point3D() { x = g.Easting, y = g.Northing, z = g.Altitude }); }
public GpsData DeSerialize(StreamWrapper streamWrapper) { var data = new GpsData(); DateTime date = default(DateTime); var trackSegment = new TrackSegment(); streamWrapper.Position = 0; using (var reader = new StreamReader(streamWrapper)) { string line; while ((line = reader.ReadLine()) != null) { if (date == default(DateTime)) { var match = Regex.Match(line, H_DATE_LINE_REGEX); if (match.Success) { var d = int.Parse(match.Groups["d"].Value); var m = int.Parse(match.Groups["m"].Value); var y = int.Parse(match.Groups["y"].Value); var yn = int.Parse(DateTime.UtcNow.ToString("yy")); if (y > yn) yn += 100; var yd = yn - y; date = new DateTime(DateTime.UtcNow.Year -yd, m, d); continue; } } if (ParseMetadata(data, x => x.Vehicle.Model, H_GLIDER_TYPE_REGEX, line)) continue; if (ParseMetadata(data, x => x.Vehicle.Identifier, H_GLIDER_REG_REGEX, line)) continue; if (ParseMetadata(data, x => x.Vehicle.Crew1, H_CREW1_REGEX, line)) continue; if (ParseMetadata(data, x => x.Vehicle.Crew2, H_CREW2_REGEX, line)) continue; if (ParseFix(line, trackSegment, date)) continue; } } if (!trackSegment.IsEmpty()) { data.Tracks.Add(new Track()); data.Tracks[0].Segments.Add(trackSegment); } return data; }
public GpsData DeSerialize(StreamWrapper streamWrapper) { var data = new GpsData(); var trackSegment = new TrackSegment(); streamWrapper.Position = 0; using (var reader = new StreamReader(streamWrapper)) { string line; while ((line = reader.ReadLine()) != null) { if (ParseFix(line, trackSegment)) continue; if (ParseWaypoint(line, data)) continue; } } if (!trackSegment.IsEmpty()) { data.Tracks.Add(new Track()); data.Tracks[0].Segments.Add(trackSegment); } return data; }
private bool ParseWaypoint(string line, GpsData data) { if (line.IsNullOrWhitespace()) return false; var match = Regex.Match(line, WPT_SENTENCE); if (match.Success) { double lat = ConvertOrd(match.Groups["lat"].Value, match.Groups["latd"].Value); double lon = ConvertOrd(match.Groups["lon"].Value, match.Groups["lond"].Value); var fix = new Point(lat, lon); data.Waypoints.Add(fix); return true; } return false; }
private bool ParseMetadata(GpsData data, Func<GpsMetadata.MetadataKeys, string> attribute, string regex, string line) { var match = Regex.Match(line, regex); if (match.Success) { data.Metadata.Attribute(attribute, match.Groups["value"].Value); return true; } return false; }