Как отфильтровать CSV с C # - PullRequest
0 голосов
/ 10 октября 2019

У меня есть CSV с 2 столбцами, первый со строкой, а второй с временем начала и окончания (например: 11: 00-22: 00). Как бы вы отфильтровали поля, содержащие время 14:00, например, с максимально возможной производительностью?

Например:

RestaurantName OpenHours

Куши Цуру 11: 30-21: 00

Ресторан Osakaya 11: 30-21: 00

The Stinking Rose 9: 00-22: 00

Я пишу 21:30 и покажу The StinkingРоуз, или если я напишу 11:00, покажите Куши Цуру, Ресторан Осакая и Вонючую Розу на консоли.

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Это быстрее, чем функции LINQ и Lambda. Также многие переменные можно удалить, просто добавив их для наглядности. Уже проверено, работает.

    static void Main(string[] args)
        {
            StreamReader reader = new StreamReader("a.txt");
            string[] time = Console.ReadLine().Split(':');
            int hour = 0;
            int minute = 0;

            try
            {
               hour = Convert.ToInt32(time[0]);
               minute = Convert.ToInt32(time[1]); 
            }
            catch
            {
               Console.WriteLine("The input must be something like aa:bb, with aa > 00 and aa < 24, bb >= 00 and bb <=53");
               return;
            }

            string[] first_time;
            string[] second_time;
            string[] time_frame;

            int first_hour;
            int first_minute;
            int second_hour;
            int second_minute;

            DateTime _date = new DateTime(1, 1, 1, hour, minute, 0);
            DateTime first_date, second_date;

            string line = "";
            string[] tokens;
            while ((line = reader.ReadLine()) != null)
            {
                tokens = line.Split(' ');
                time_frame = tokens[tokens.Length - 1].Split('-');
                first_time = time_frame[0].Split(':');
                first_hour = Convert.ToInt32(first_time[0]);
                first_minute = Convert.ToInt32(first_time[1]);

                first_date = new DateTime(1, 1, 1, first_hour, first_minute, 0);
                second_time = time_frame[1].Split(':');
                second_hour = Convert.ToInt32(second_time[0]);
                second_minute = Convert.ToInt32(second_time[1]);

                second_date = new DateTime(1, 1, 1, second_hour, second_minute, 0);

                if (_date >= first_date && _date <= second_date)
                {
                    for (int i = 0; i < tokens.Length - 1; i++)
                    {
                        Console.Write(tokens[i]);
                        Console.Write(" ");
                    }
                    Console.WriteLine("");
                }
            }    
            reader.Close();
        }
0 голосов
/ 10 октября 2019

Используйте LINQ, чтобы прочитать файл CSV и запросить его. Чтобы понять основы чтения файла и использования LINQ для его запроса, проверьте ответ: Считайте CSV с помощью Linq

...