using System.Collections.Generic;
string dataToRead = @"2 06:45-08:15 2-11,14-19 D9-505 139970
2 06:45-09:20 12 KTX-B7 147354
2 06:45-11:15 13 B6b-102 147354
2 09:20-11:15 12 SanB13 147357
2 13:15-16:45 12 SanB13 147357
2 13:15-16:45 13 SanB13 147357
2 14:10-15:50 2-11,14-19 D9-403 139952
3 06:45-11:15 12 SanB13 147357
3 06:45-11:15 13 SanB13 147357
3 10:15-11:45 2-11,14-19 D9-501 139961
3 13:15-16:45 12 SanB13 147357
3 13:15-16:45 13 SanB13 147357
3 14:10-15:50 2-11,14-19 D9-403 139952
4 06:45-11:15 12 B6b-102 147354
4 06:45-11:15 13 B6b-102 147354
4 10:15-11:45 2-11,14-19 D9-505 139962
4 12:30-14:00 2-11,14-19 D9-501 139969
4 13:15-16:45 12 SanB13 147357
4 13:15-16:45 13 SanB13 147357
4 14:10-15:50 2-11,14-19 D9-403 139952
5 06:45-11:15 12 SanB13 147357
5 06:45-11:15 13 SanB13 147357
5 12:30-14:00 2-11,14-19 D9-501 139945
5 13:15-16:45 12 SanB7 147355
5 13:15-16:45 13 SanB7 147355
5 14:10-15:50 2-11,14-19 D9-403 139952
6 06:45-11:15 12 SanB7 147357
6 06:45-11:15 13 SanB13 147357
6 08:25-10:05 2-11,14-19 D9-501 139978
6 10:15-11:45 3,5,7,9,11,15,17,19 D9-502 139979
6 13:15-16:45 12 SanB13 147357
6 14:10-15:50 2-11,14-19 D9-403 139952
6 15:00-16:45 13 SanB7 147357
7 06:45-11:15 12 B6b-102 147354
7 12:30-17:30 2,3,4,6,8 D5-306 732821";
var timetable = new Dictionary<string, Dictionary<string, Dictionary<string, string>>>();
StringReader reader = new StringReader(dataToRead);
String[] process_week(string week_input)
foreach (string part in week_input.Split(','))
string[] range = part.Split('-');
for (int i = Int16.Parse(range[0]); i <= Int16.Parse(range[1]); i++)
result = result.Append(i.ToString()).ToArray();
result = result.Append(part).ToArray();
for (int i = 1; i <= max_week; i++)
timetable.Add(i.ToString(), new Dictionary<string, Dictionary<string, string>>());
while ((line = reader.ReadLine()) != null)
string[] splitted = line.Split("\t");
foreach (var week in process_week(splitted[1]))
if (!timetable.ContainsKey(week.ToString()))
timetable.Add(week.ToString(), new Dictionary<string, Dictionary<string, string>>());
string[] temp_day = splitted[0].ToString().Split(",");
if (!timetable[week.ToString()].ContainsKey("Thứ Hai"))
timetable[week.ToString()].Add("Thứ Hai", new Dictionary<string, string>());
timetable[week.ToString()]["Thứ Hai"].Add(temp_day[1], splitted[6] + ',' + splitted[7]);
if (!timetable[week.ToString()].ContainsKey("Thứ Ba"))
timetable[week.ToString()].Add("Thứ Ba", new Dictionary<string, string>());
timetable[week.ToString()]["Thứ Ba"].Add(temp_day[1], splitted[6] + ',' + splitted[7]);
if (!timetable[week.ToString()].ContainsKey("Thứ Tư"))
timetable[week.ToString()].Add("Thứ Tư", new Dictionary<string, string>());
timetable[week.ToString()]["Thứ Tư"].Add(temp_day[1], splitted[6] + ',' + splitted[7]);
if (!timetable[week.ToString()].ContainsKey("Thứ Năm"))
timetable[week.ToString()].Add("Thứ Năm", new Dictionary<string, string>());
timetable[week.ToString()]["Thứ Năm"].Add(temp_day[1], splitted[6] + ',' + splitted[7]);
if (!timetable[week.ToString()].ContainsKey("Thứ Sáu"))
timetable[week.ToString()].Add("Thứ Sáu", new Dictionary<string, string>());
timetable[week.ToString()]["Thứ Sáu"].Add(temp_day[1], splitted[6] + ',' + splitted[7]);
if (!timetable[week.ToString()].ContainsKey("Thứ Bảy"))
timetable[week.ToString()].Add("Thứ Bảy", new Dictionary<string, string>());
timetable[week.ToString()]["Thứ Bảy"].Add(temp_day[1], splitted[6] + ',' + splitted[7]);
foreach (var week in timetable.Keys)
foreach (var day in timetable[week.ToString()].Keys)
foreach (KeyValuePair<string, string> subject in timetable[week.ToString()][day.ToString()])
Console.Write(subject.Value.Split(",")[1]);
Console.Write(subject.Key.Split(" - ")[0].Replace('h', ':'));
Console.Write(subject.Key.Split(" - ")[1].Replace('h', ':'));
Console.Write(day.ToString());
Console.Write(week.ToString());
Console.Write(week.ToString());
Console.Write(subject.Value.Split(",")[0]);