private bool TryGetStationId(string text, out int result) { if (!int.TryParse(text, out var n)) { var station = StationReader.GetStationByName(text); if (station is null) { result = default; return(false); } else { result = station.StationId; return(true); } } if (n > 0 && n < 5) { result = n; return(true); } else if (StationReader.GetStationById(n) is null) { result = default; return(false); } else { result = n; return(true); } }
private async Task GetAllData(CancellationToken cancellationToken) { var query = StationReader.GetAllStations().Where(std => std.StationArea == 0).Select(std => std.StationId); var savePath = path + "\\すべての駅"; await DataGeter(cancellationToken, query, savePath); }
protected override async void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.TrainTime); InitializeLayoutParams(); Window.SetStatusBarColor(new Android.Graphics.Color(Android.Support.V4.Content.ContextCompat.GetColor(this, Resource.Color.colorPrimary))); mainLinearLayout = FindViewById <LinearLayout>(Resource.Id.MainLinearLayout); backButton = FindViewById <ImageView>(Resource.Id.BackButton); favoriteButton = FindViewById <ImageView>(Resource.Id.FavoriteButton); swipeRefreshLayout = FindViewById <SwipeRefreshLayout>(Resource.Id.swipe_refresh); toolBarText = FindViewById <TextView>(Resource.Id.ToolbarText); GettedTimeTextView = FindViewById <TextView>(Resource.Id.GetedTimeTextView); backButton.Click += BackButton_Click; favoriteButton.Click += FavoriteButton_Click; swipeRefreshLayout.Refresh += SwipeRefreshLayout_Refresh; station = StationReader.GetStationByName(Intent.GetStringExtra("station")); if (station is null) { throw new NotSupportedException(); } else { IsFavorited = UserConfigManager.IsFavoriteStation(station); await ShowData(); toolBarText.Text = station.Name; favoriteButton.SetImageResource(IsFavorited ? Resource.Drawable.FavoritedIcon : Resource.Drawable.AddFavoriteIcon); } }
/// <summary> /// <see cref="RawTrainDataFile"/>を解析して<see cref="TrainDataFile"/>を取得します。 /// </summary> /// <param name="rawTrainDataFile">解析対象のデータ</param> /// <returns></returns> public static TrainDataFile ParseRawTrainDataFile(RawTrainDataFile rawTrainDataFile) { var getedDateTime = DateTime.ParseExact(rawTrainDataFile.Departures_datetime.ToString(), "yyyyMMddHHmm", System.Globalization.DateTimeFormatInfo.InvariantInfo); var station = StationReader.GetStationById(rawTrainDataFile.StationId); var gettedHour = getedDateTime.Hour; var arrivalTrainDatas = new Dictionary <JrhDestType, IReadOnlyList <TrainData> >(); var departureTrainDatas = new Dictionary <JrhDestType, IReadOnlyList <TrainData> >(); foreach (var rawArrData in rawTrainDataFile.Arrivals) { var dest = JrhDestTypeCreater.FromParseText(rawArrData.Key); var data = rawArrData.Value.Select(rtd => TrainDataParser.ParseTrainData(rtd, gettedHour, station, TrainData.ArrivalTypes.Arrival)); arrivalTrainDatas.Add(dest, Array.AsReadOnly(data.ToArray())); } foreach (var rawDepData in rawTrainDataFile.Departures) { var dest = JrhDestTypeCreater.FromParseText(rawDepData.Key); var data = rawDepData.Value.Select(rtd => TrainDataParser.ParseTrainData(rtd, gettedHour, station, TrainData.ArrivalTypes.Departure)); departureTrainDatas.Add(dest, Array.AsReadOnly(data.ToArray())); } return(new TrainDataFile(station, getedDateTime, departureTrainDatas, arrivalTrainDatas)); }
public static bool TryGetIdInFileName(string fileName, out int id) { var str = fileName.GetRangeWithEnd(' '); if (int.TryParse(str, out var n)) { id = n; return(true); } var res = StationReader.GetStationByName(str); id = res?.StationId ?? default; return(res != null); }
public static string GetSaveFileName(int id, DateTime dateTime) { string defaultFileName; if (id >= 1 && id < 5) { defaultFileName = $"{id} {dateTime.ToString("yyyy-MM-dd_HH-mm-ss")}"; } else { defaultFileName = $"{StationReader.GetStationById(id).Name} {dateTime.ToString("yyyy-MM-dd_HH-mm-ss")}"; } return(defaultFileName); }
private static async Task <Dictionary <int, TrainDataFile> > GetTrainDatas(params int[] id) { var result = new Dictionary <int, TrainDataFile>(); var stations = id.Select(n => StationReader.GetStationById(n)); var inAreaStaion = stations.Where(std => std.StationArea == 0).ToArray(); var outAreaStation = stations.Where(std => std.StationArea != 0); var count = 0; if (inAreaStaion.Any()) { TrainDataFile[] array = default; do { array = await Task.WhenAll(inAreaStaion.Select(n => TrainInfoReader.GetTrainDataAsync(n.StationId))); for (var i = 0; i < array.Length; i++) { result.Add(inAreaStaion[i].StationId, array[i]); } count++; if (count > 3) { throw new TrainDataTimeSyncException(result, "時刻が同期できません"); } if (count > 1) { Debuggers.LogWriter.WriteLog($"列車位置計算用の列車情報の時刻同期に失敗...再試行します"); } }while (!CheckTrainDataFiles(array)); } if (outAreaStation.Any()) { var need = outAreaStation.Select(std => std.StationArea).Distinct().ToArray(); var array = await Task.WhenAll(need.Select(n => TrainInfoReader.GetSpecialTrainDatasAsync(n))); foreach (var station in outAreaStation) { var index = Array.IndexOf(need, station.StationArea); result.Add(station.StationId, array[index].First(td => td.Station == station)); } } return(result); }
private async void SearchButton_Click(object sender, RoutedEventArgs e) { var station = StationReader.GetStationByName(StationSerchTextBox.Text); if (station is null) { MessageBox.Show($"{StationSerchTextBox.Text}は見つかりませんでした"); } else { SelectedSource = await TrainInfoReader.GetTrainDataAsync(station.StationId); this.Close(); } }
/// <summary> /// 列車の行先を設定します。 /// </summary> /// <param name="destinationString">行先を表す文字列。</param> public static Station GetTrainDestination(string destinationString) { if (destinationString.Contains("(")) { destinationString = destinationString.GetRange('(', ')'); } if (destinationString.EndsWith("行")) { return(StationReader.GetOrCreateStationByName(destinationString.Substring(0, destinationString.Length - 1))); } else { return(StationReader.GetOrCreateStationByName(destinationString)); } }
private static async Task <Dictionary <int, TrainDataFile> > GetTrainDatas(IEnumerable <TrainDataFile> trainDataFiles, params int[] id) { var result = new Dictionary <int, TrainDataFile>(); var stations = id.Select(n => StationReader.GetStationById(n)); return(await Task.Run(() => { var keyValuePairs = new Dictionary <int, TrainDataFile>(); foreach (var n in id) { keyValuePairs.Add(n, trainDataFiles.First(tdf => tdf.Station.StationId == n)); } return keyValuePairs; })); }
/// <summary> /// 駅 ID を指定して列車情報を取得します。エリア外の駅の場合広域データから列車情報を返します。 /// </summary> /// <param name="id">取得対象の駅 ID。</param> /// <returns>解析済みの列車情報。</returns> public static async Task <TrainDataFile> GetTrainDataAsync(int id) { var station = StationReader.GetStationById(id); if (station.StationArea != 0) { return(await GetSpecialTrainDataAsync(station)); } var data = await TrainDataGeter.GetTrainDataJsonAsync(id); return(await Task.Run(() => { var rawTrainDataFile = JsonDeserializer.DeserializeTrainInfo(data); return TrainFilePaeser.ParseRawTrainDataFile(rawTrainDataFile); })); }
private async void SaveAllEndButton_Click(object sender, RoutedEventArgs e) { var folderBrowserDialog = new System.Windows.Forms.FolderBrowserDialog() { Description = "保存先フォルダを選択", }; folderBrowserDialog.ShowDialog(); var folder = folderBrowserDialog.SelectedPath; var saveFileWriter = new SaveFileWriter(folder); foreach (var std in StationReader.GetAllEnds()) { await saveFileWriter.SaveTrainData(std.StationId); } }
/* * 函館線 小樽方面の位置計算 * ・札幌方面はすべて札幌到着データを利用。 * ・小樽方面のうち… * 札幌-手稲は手稲到着データ利用 * ほしみ到着データ(普通列車)のうち手稲-ほしみ間にある列車は反映 * 小樽到着データはほしみ-小樽間の列車及び、ほしみ通過の快速列車については手稲-小樽間で利用。 */ private static async Task <(TrainPositionData, TrainPositionData)> GetOtaruData(JrhLine jrhLine, Dictionary <int, TrainDataFile> dataFile) { var sapporoData = GetPosition(dataFile[91].ArrivalTrainDatas[JrhDestType.Hakodate_Otaru], jrhLine); var teineData = GetPosition(dataFile[85].ArrivalTrainDatas[JrhDestType.Sapporo_Hakodate], jrhLine) .Where(tuple => tuple.position >= 0 && tuple.position <= 11); var hoshimiData = GetPosition(dataFile[82].ArrivalTrainDatas[JrhDestType.Sapporo_Hakodate], jrhLine) .Where(tuple => tuple.position >= 12 && tuple.position <= 17); var otaruData = GetPosition(dataFile[76].ArrivalTrainDatas[JrhDestType.Sapporo_Hakodate], jrhLine) .Where(tuple => (tuple.position >= 18 && tuple.position <= 28) || (tuple.trainData.Name.GetTypesByStation(StationReader.GetStationByName("ほしみ")) == TrainData.TrainTypes.Rapid && tuple.position >= 12 && tuple.position <= 28)); var sapporoArrData = new TrainPositionData(jrhLine, new[] { sapporoData }); var sapporoDepData = new TrainPositionData(jrhLine, new[] { teineData, hoshimiData, otaruData }); return(sapporoArrData, sapporoDepData); }
private async Task DataGeter(CancellationToken cancellationToken, IEnumerable <int> id, string saveFolderPath) { while (true) { var savePath = saveFolderPath + $"\\{DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss")}"; Directory.CreateDirectory(savePath); var saveFileWriter = new SaveFileWriter(savePath); await Task.Run(() => { Parallel.ForEach(id, async staId => { try { await saveFileWriter.SaveTrainData(staId); if (staId < 5) { LogText.WriteLine($"{DateTime.Now}: 広域データID{staId}を保存しました..."); } else { LogText.WriteLine($"{DateTime.Now}: {StationReader.GetStationById(staId).Name}を保存しました..."); } } catch (TrainDataGetException ex) { LogText.WriteLine("通信中に例外が発生しました..."); throw; } }); }); LogText.WriteLine("取得プロセス一時停止(取得完了)..."); await Task.Delay(DelayTime * 60 * 1000, cancellationToken); if (cancellationToken.IsCancellationRequested) { break; } } }
/// <summary> /// 「検索」ボタンが押されたときの処理。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void SearchButton_Click(object sender, EventArgs e) { var editText = View.FindViewById <EditText>(Resource.Id.StaionNameEditText); var textView = View.FindViewById <TextView>(Resource.Id.StationSearchErrorText); var name = editText.Text; if (name.EndsWith("駅")) { name = name.Substring(0, name.Length - 1); } var station = StationReader.GetStationByName(name); if (station == null) { textView.Text = $"駅名「{name}」が見つかりません。"; } else { var intent = new Intent(Context, new TrainTimeActivity().Class); intent.PutExtra("station", station.Name); StartActivity(intent); } }
public void TestCaseSetUp() { reader = new StationReader(map, TestObjectFactory.TestDirectory + "StationReaderTestInput.csv"); }
public void DefaultConstructor() { reader = new StationReader(new Map()); Assert.Greater(reader.StationsById.Count, 0); }
public IEnumerable <Station> GetFavoriteStations() { return(FavoriteStationString.Select(str => StationReader.GetStationByName(str))); }