• ベストアンサー

時刻表を分でソートする方法を教えてもらえませんか?

NextTrainと言う時刻表表示ソフトを使っているのですが 7種類の時刻表を1つの時刻表ファイルにまとめて 一度で見れるようにしたいのです。 peal初めてで色々と読んでみてもよく解りませんでした。 今の状況は、ActivePerl 5.10.0.1003 をセットアップして、  『Hello World』を表示させる事は出来ました。 『例として6時から8時までをソートしてみます』 【分でソート前】 06: a22 a52  b07 c25 c47 c58 c51   d25    e55 07: a12 a30 a40 a49 a58 c09 c21 c34 c46 c59 d13 d24 d37 d49 e15 e34 e44 e53 08: a07 a17 a28 a38 a47 b04 b45 c12 c25 c38 c51 d02 d21 d32 d42 e58 【分でソート完了】 06: b07 a22 c25 d25 c47 c51 a52 e55 c58 07: c09 a12 d13 e15 c21 d24 a30 c34 e34 d37 a40 e44 c46 a49 d49 e53 a58 c59 08: d02 b04 a07 c12 a17 d21 c25 a28 d32 a38 c38 d42 b45 a47 c51 e58  ※分の前に付いているアルファベットはバスの系統なので必ず付きます。   Perlで無くても簡単に出来る方法があれば教えてください。   アドバイスよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • __awa__
  • ベストアンサー率100% (5/5)
回答No.3

・diagrams.txtというテキストファイルに時刻表のデータがある. ・時と分の区切りは半角のコロン(:). ・毎時のダイヤは改行なしで1行に収まっている. ・時間の前のアルファベットは1文字. と仮定してとりあえず書いてみました. 1行目でファイルを開いて,2行目で行ごとに読み込んで,3行目で時と分を切り分けて,4行目で分単位でソートした順に表示して,5行目で改行して,2行目に戻って繰り返して,終わったら6行目でファイルを閉じる.という動作をします,多分. open FILE, "diagram.txt" or die "$!"; while(my $line = <FILE>){ my ($h, $m) = split /:\s*/, $line; print $h . ':'; print ' ' . $_ foreach(sort {substr($a, 1) <=> substr($b, 1)} split /[\s ]+/, $m); print "\n"; } close FILE;

601
質問者

お礼

詳しく説明してもらって何とかできました。 ほんとに楽にソート出来るようになって嬉しいです。 もっと色々出来る様になりたいなと思いました。 興味のある本を探して読んでみようと思います。 ありがとうございました。

その他の回答 (2)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

流れを読まずにrubyで。 こっちの方がすっきり? DATA.each do |line| ?hour, *departures = line.chomp.split(/[: ]+/) ?next unless hour && departures ?puts "#{hour}: " + departures.sort_by {|e| e.scan(/\d+/) }.join(' ') end __END__ 06: a22 a52 b07 c25 c47 c58 c51 d25 e55 07: a12 a30 a40 a49 a58 c09 c21 c34 c46 c59 d13 d24 d37 d49 e15 e34 e44 e53 08: a07 a17 a28 a38 a47 b04 b45 c12 c25 c38 c51 d02 d21 d32 d42 e58 実行結果: 06: b07 a22 d25 c25 c47 c51 a52 e55 c58 07: c09 a12 d13 e15 c21 d24 a30 c34 e34 d37 a40 e44 c46 d49 a49 e53 a58 c59 08: d02 b04 a07 c12 a17 d21 c25 a28 d32 c38 a38 d42 b45 a47 c51 e58

601
質問者

お礼

ruby 名前だけは見たことがあります。 ruby でも出来るんですね。 一度、検索して色々読んでみます。 情報をありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

よくあるのはシュワルツ変換かなぁ. 例えば配列 @timetable にある時間帯 (6時台など) のデータが入っていれば @sorted = map { $->[1] } sort { $a->[0] <=> $b->[0] } map { [/(\d+)/, $_] } @timetable; で @sorted にソート済みのデータが入ります.

601
質問者

お礼

Perlでソートできる方法を教えてもらってありがとうございます。 プログラムをまったく初めてなので何も分からなかったから、 とても参考になりました。だいぶ前進しました。 Perlをもう少し勉強しないと、処理前の時刻表のデータを どのようにしたらソートさせることが出来るのか?わからない状態です。 もう少し色々と読んだり参考にしたりしてみます。

関連するQ&A