Does anyone know how to convert this D code to C# ?

string[] parse_gps_data(string data, SysTime start_time, SysTime end_time) {
        // Validate input
        string[] gps;
        if (!data.length) {
                error("Empty GPS file");
                return gps;
        }

        auto start_timestamp = start_time.toUnixTime();
        auto end_timestamp = end_time.toUnixTime();

        // Parse every line
        foreach (line; splitLines(data)) {
                // Detect type of line
                auto match = matchFirst(line, GPS_LINE);
                if (!match) {
                        // Unknown format
                        error("Unknown GPS line: " ~ line);
                        continue;
                }

                // Parse time
auto record_time = SysTime.fromISOExtString(match[1].replace(" ", "T"));
                auto record_timestamp = record_time.toUnixTime();
if (record_timestamp < start_timestamp || record_timestamp > end_timestamp) {
                        // Skip invalid time interval
                        error(format(
                                "Invalid GPS interval: %d > %d || %d < %d\nLine: 
%s",
record_timestamp, start_timestamp, record_timestamp, end_timestamp,
                                line
                        ));
                        continue;
                }

                // Parse coordinates
                float longitude;
                float latitude;

                if (to!char(match[2]) == 'N') {
                        latitude = to!float(match[3]);

                        if (to!char(match[4]) == 'W') {
                                longitude = to!float(match[5]) * -1;
                        }
                        else {
                                longitude = to!float(match[5]);
                        }
                }

                else if (to!char(match[2]) == 'W') {
                        longitude = to!float(match[3]) * -1;
                        latitude = to!float(match[5]);
                }

                else if (to!char(match[2]) == 'E') {
                        longitude = to!float(match[3]);
                        latitude = to!float(match[5]);
                }

                // Prepare gps timestamp
auto record_interval = (record_time - start_time).split!("hours", "minutes", "seconds")();
                gps ~= format(
                        "('%02d:%02d:%02d', '(%f, %f)'::point)::time_point",
record_interval.hours, record_interval.minutes, record_interval.seconds,
                        longitude, latitude
                );
        }

        return gps;
}




I would appreciate if anyone who has both D and C# experience.



So far I have this :



 /// <summary>
        ///
        /// </summary>
        /// <param name="deviceData"></param>
        /// <param name="device"></param>
        /// <returns></returns>
public string[] ParseGPSData (string deviceData, DateTime startTime, DateTime endTime)
        {
            string[] gps = null;

            if (deviceData == string.Empty)
                return gps;

            var startTimeStamp = startTime.ToUniversalTime ();
            var endTimeStamp = endTime.ToUniversalTime ();


foreach (var line in Regex.Split(deviceData, "\r\n |\r |\n"))
            {
                var match = _rx.Match(line);
                if (!match.Success)
                    continue;


var recordTime = match.Groups[1].Value.Replace (' ', 'T');



            }

            return gps;
        }
    }




The constructor for GPS class has this defined :


 public class GPSEngine
    {
        private Regex _rx;

        /// <summary>
        ///
        /// </summary>
        public GPSEngine ()
        {
_rx = new Regex (@"^(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})\s+(N|W|E)(\d+\.\d+)\s+(N|W|E)(\d+\.\d+)",
                RegexOptions.Compiled | RegexOptions.IgnoreCase);
        }


Reply via email to