アプリ版:「スタンプのみでお礼する」機能のリリースについて

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で無くても簡単に出来る方法があれば教えてください。
  アドバイスよろしくお願いします。

A 回答 (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;
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/23 21:28

流れを読まずに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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/21 09:32

よくあるのはシュワルツ変換かなぁ.


例えば配列 @timetable にある時間帯 (6時台など) のデータが入っていれば
@sorted = map { $->[1] } sort { $a->[0] <=> $b->[0] } map { [/(\d+)/, $_] } @timetable;
で @sorted にソート済みのデータが入ります.
    • good
    • 0
この回答へのお礼

Perlでソートできる方法を教えてもらってありがとうございます。
プログラムをまったく初めてなので何も分からなかったから、
とても参考になりました。だいぶ前進しました。

Perlをもう少し勉強しないと、処理前の時刻表のデータを
どのようにしたらソートさせることが出来るのか?わからない状態です。
もう少し色々と読んだり参考にしたりしてみます。

お礼日時:2008/07/21 09:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!