指定されたファイルから時刻表を読み込み、最も近い未来の時刻を取得します。
/*
c:\Users\ebata\tomioka3b\others\main42.go
指定されたファイルから時刻表を読み込み、最も近い未来の時刻を取得します。
*/
package main
import (
"bufio"
"fmt"
"os"
"strings"
"time"
)
func main() {
// 指定されたファイル名
fileName := "To_Sengakuzi_weekdays.csv" // ここにファイル名を入力してください
// 指定されたファイルから時刻表を読み込む
schedule, err := readScheduleFromFile(fileName)
if err != nil {
fmt.Println("Error:", err)
return
}
//fmt.Println("時刻表:", schedule)
// 現在時刻を取得
now := time.Now().Format("15:04:05")
now = "12:29:00"
// 最も近い未来の時刻を取得
nextTime := getNextTime(schedule, now)
// 結果を出力
fmt.Println("最も近い未来の時刻:", nextTime)
}
func readScheduleFromFile(fileName string) ([]time.Time, error) {
// ファイルを開く
file, err := os.Open(fileName)
if err != nil {
return nil, err
}
defer file.Close()
var schedule []time.Time
// ファイルから時刻を読み取る
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := scanner.Text()
times := strings.Split(line, ",")
for _, t := range times {
//fmt.Println("時刻:", t)
t1, err := time.Parse("15:04:05", t)
if err != nil {
fmt.Println("時刻のパースに失敗しました:", err)
return nil, err
}
schedule = append(schedule, t1)
}
}
// fmt.Println("pass4")
// fmt.Println("schedule: ", schedule)
return schedule, nil
}
// 指定された時刻表から最も近い未来の時刻を取得する関数
func getNextTime(schedule []time.Time, inputTime string) string {
// 入力時刻のパース
input, err := time.Parse("15:04:05", inputTime)
if err != nil {
panic(err)
}
// 時刻表の各時刻との差を計算し、最小の差を見つける
minDiff := time.Hour * 24
var nextTime string
for _, t := range schedule {
// 時刻の差を計算
diff := t.Sub(input)
// 負の差(過去の時刻)を無視
if diff < 0 {
continue
}
// 最小の差を更新
if diff < minDiff {
minDiff = diff
nextTime = t.Format("15:04:05")
}
}
return nextTime
}
To_Sengakuzi_weekdays.csv
4:53:00
5:08:00,5:23:00,5:32:00,5:44:00,5:55:00
6:03:00,6:14:00,6:26:00,6:33:00,6:40:00,6:44:00,6:49:00,6:53:00,6:59:00
7:04:00,7:09:00,7:14:00,7:19:00,7:26:00,7:30:00,7:37:00,7:46:00,7:52:00,7:58:00
8:06:00,8:14:00,8:21:00,8:26:00,8:33:00,8:41:00,8:47:00,8:54:00
9:02:00,9:10:00,9:21:00,9:31:00,9:41:00,9:53:00
10:03:00,10:13:00,10:24:00,10:33:00,10:44:00,10:53:00
11:04:00,11:13:00,11:24:00,11:32:00,11:44:00,11:53:00
12:04:00,12:13:00,12:24:00,12:33:00,12:44:00,12:53:00
13:04:00,13:13:00,13:24:00,13:33:00,13:44:00,13:53:00
14:04:00,14:13:00,14:24:00,14:33:00,14:43:00,14:52:00
15:02:00,15:12:00,15:22:00,15:31:00,15:41:00,15:52:00
16:01:00,16:10:00,16:20:00,16:31:00,16:42:00,16:53:00
17:02:00,17:13:00,17:23:00,17:34:00,17:43:00,17:53:00,17:59:00
18:12:00,18:19:00,18:28:00,18:38:00,18:48:00,18:57:00
19:08:00,19:18:00,19:26:00,19:36:00,19:46:00,19:55:00
20:06:00,20:16:00,20:27:00,20:36:00,20:46:00,20:56:00
21:08:00,21:15:00,21:18:00,21:29:00,21:39:00,21:50:00
22:01:00,22:11:00,22:21:00,22:26:00,22:38:00,22:53:00
23:12:00,23:33:00,23:54:00