過去の桐井戸端BBS (桐ver.8) |
17096 | タイムを比較して何秒の差があるかを計算したい。 | まる | 2002/08/27-07:12 |
タイムの比較をしようとしています。以前の記録との比較で、級及び何秒差があるかを知りたいのです。 記録表には 次のような形式で表示されています。 1級 50.33 ・・・50秒33のこと 2級 1:02.22 ・・・1分2秒22のこと 3級 2:05.66 ・・・2分5秒66のこと つまり、分が ”:”となっています。 このような表があるとき、2分05秒は 3級で -0.66と判定します。 1分02秒22は 2級で 0と判定します。 今は、1分を60秒換算して、秒に加算して、それを計算する手作業をやっていますが、 表形式で置換表示できないかと思っています。 アドバイスをお願いします。 | |||
17108 | もう少し、具体的な表のイメージを | pokopon | 2002/08/27-22:19 |
記事番号17096へのコメント まるさん こんばんは >以前の記録との比較で、級及び何秒差が >あるかを知りたいのです。 は分かりますが、 >記録表には 次のような形式で表示されています。 >1級 50.33 ・・・50秒33のこと >2級 1:02.22 ・・・1分2秒22のこと >3級 2:05.66 ・・・2分5秒66のこと は、こういう並びでデータ(表)があるというとですか? その値と、今回のデータを比較して、「一番時間差が小さい級と時間差」を出したいということですか? >このような表があるとき、2分05秒は 3級で -0.66と判定します。 > 1分02秒22は 2級で 0と判定します。 いまいち、現在の表のイメージがつかめません? もう少し、具体的な表の構造と処理したい内容を示し下さい。 (最近、ボケが激しくなって、意味が理解しにくくなっています) | |||
17114 | Re:もう少し、具体的な表のイメージを | まる | 2002/08/28-07:05 |
記事番号17108へのコメント pokoponさん 説明不足ですみません。 この表は、スポーツの級(能力)を表すものです。たとえば水泳競技にたとえるなら、 100メートルを50秒(a)、1分(b) 2分(c) 49秒(d)で泳いだ人がいるとすると、 この表から aは 1級 -0.33 bは 2級 cは 4級 dは 1級 -1.33 と、判定します。 aとdは同じ級なので、その差からdがaより優れていると判断します。 記録表 自由形 平泳ぎ 1級 50.33 1:01.01 2級 1:02.22 1:40.30 3級 1:10.66 2:00.01 4級 2:01.00 こんな感じですが。 | |||
17115 | Re:もう少し、具体的な表のイメージを | pokopon | 2002/08/28-11:41 |
記事番号17114へのコメント まるさん へ >もう少し、具体的な表の構造と処理したい内容を示し下さい。 皆さんが知りたいのは、現在処理している表の 項目とかデータの並びです。 >100メートルを50秒(a)、1分(b) 2分(c) 49秒(d)で泳いだ人がいるとすると、 >この表から > aは 1級 -0.33 > bは 2級 > cは 4級 > dは 1級 -1.33 >と、判定します。aとdは同じ級なので、その差からdがaより優れていると判断しま >す。 ですから、なぜaが1級なんですか? 級ごとに基準値があるのですね。 その基準値は? > 記録表 > 自由形 平泳ぎ >1級 50.33 1:01.01 >2級 1:02.22 1:40.30 >3級 1:10.66 2:00.01 >4級 2:01.00 これが、基準値ですか?それとも、実際のデータですか? 「実際の表の構造とデータの中身の例」をお示しください。 まるさんは当事者ですので、 全てが事情が分かっているとは思いますけど、いまいち私には理解できないでいます。 (私は本当にボケが始まったのだろうか?) | |||
17116 | Re:もう少し、具体的な表のイメージを | まる | 2002/08/28-12:21 |
記事番号17115へのコメント pokoponさん 記録表 自由形 平泳ぎ 1級 50.33(以内で泳ぐことができる) 1:01.01 2級 1:02.22(以内で泳ぐことができる) 1:40.30 3級 1:10.66(以内で泳ぐことができる) 2:00.01 4級 2:01.00(以内で泳ぐことができる) 上記は基準値です。 実際に50秒で泳ぐことができたら1級で、1分だと2級となります。 このような説明でよろしいでしょうか。 | |||
17117 | Re:もう少し、具体的な表のイメージを | pokopon | 2002/08/28-13:06 |
記事番号17116へのコメント >上記は基準値です。 と、最初から書いて欲しかったのです。 当初の目的は >タイムの比較をしようとしています。以前の記録との比較で、級及び何秒差が >あるかを知りたいのです。 ですので、実際の桐の表はどういった構成ですか? が、次に知りたい内容でした。 [氏名] [自由型記録] [自由型級] [自由型タイム差] イアンソープ 1:00.56 1級 0.56 ですか? [自由型記録]の欄にタイムを入れると、上記の基準値で自動計算して、級とタイム差を得たいということ? 再度ご提示下さい。具体的な表の構成を!! | |||
17120 | Re:もう少し、具体的な表のイメージを | まる | 2002/08/28-17:01 |
記事番号17117へのコメント pokoponさん >>上記は基準値です。 >と、最初から書いて欲しかったのです。 > >当初の目的は >>タイムの比較をしようとしています。以前の記録との比較で、級及び何秒差が >>あるかを知りたいのです。 > >ですので、実際の桐の表はどういった構成ですか? >が、次に知りたい内容でした。 競技.tbl 文字列 文字列 文字列 数値 [氏名] [自由型記録] [自由型級] [自由型タイム差] イアンソープ 1:00.56 1級 0.56 上記の通りです。基準表は 基準表.tbl にあって、 競技.tbl に自由型記録を入力することによって、 自由形級、自由形タイム差を計算で出したいのです。 | |||
17128 | Re:もう少し、具体的な表のイメージを | pokopon | 2002/08/29-00:04 |
記事番号17120へのコメント (どっちが質問者なんだろう。(^^ゞ) 最後の質問です。 >4級 2:01.00 だったら、3:00.00の人は「何級?」 すなわち、最大基準値を越えた人の場合の表示はどうします? もうひとつ、時間の入力方法ですが、 >1級 50.33 の場合、「0:50.33」 としては駄目ですか? 1分以内は、必ず「0:」を省略しなければなりませんか? こういうのって、「表引き」で簡単に処理可能だと思うのですけど。 そのためには、上記の内容がはっきりしませんと・・・・。 お試しください。 | |||
17129 | Re:もう少し、具体的な表のイメージを | まる | 2002/08/29-07:05 |
記事番号17128へのコメント pokoponさん >(どっちが質問者なんだろう。(^^ゞ) > >最後の質問です。 > >>4級 2:01.00 >だったら、3:00.00の人は「何級?」 >すなわち、最大基準値を越えた人の場合の表示はどうします? 圏外、つまり級なしです。 > >もうひとつ、時間の入力方法ですが、 >>1級 50.33 >の場合、「0:50.33」 >としては駄目ですか? 1分以内は、必ず「0:」を省略しなければなりませんか? 省略は可能です。 >こういうのって、「表引き」で簡単に処理可能だと思うのですけど。 0:50.33が文字列なので、詰まっています。 | |||
17130 | 訂正 | まる | 2002/08/29-07:13 |
記事番号17129へのコメント >もうひとつ、時間の入力方法ですが、 >1級 50.33 >の場合、「0:50.33」 >としては駄目ですか? 1分以内は、必ず「0:」を省略しなければなりませんか? 「0:」は入力してもいいのですが、自動計測装置でタイムを取り込むので、1分以内場合は 「0:」は表示されません。 | |||
17132 | Re:文字列でも表引きはできます | pokopon | 2002/08/29-10:00 |
記事番号17129へのコメント >>こういうのって、「表引き」で簡単に処理可能だと思うのですけど。 >0:50.33が文字列なので、詰まっています。 データが文字列であっても、表引きは可能です。 (>= や <= の条件での検索は可能です) | |||
17136 | Re:タイムの比較 | 今村 誠 | 2002/08/29-16:56 |
記事番号17096へのコメント まるさん >今は、1分を60秒換算して、秒に加算して、それを計算する手作業をやってい >ますが、表形式で置換表示できないかと思っています。 >アドバイスをお願いします。 pokoponさんのアドバイスの方法でもうまくいくとは思いますが、 最初の要望に戻ると、文字を数値に変えて、基準値と比較して 何級かを求めたらいかがでしょうか。 (基準値も数値に変えないといけないと思います。) とりあえず、まるさんの文字から数値に替える場合の計算式は #progn( #setq(&STR, #sstr([自由型記録],#文字位置([自由型記録],"."))), #setq(&実行リターン, #cond(#L(&STR)>2, #num(#sstr(&STR,2))*10, #L(&STR)>1, #num(#sstr(&STR,2))*100,1,0)), #setq(&STR, #s( #cond(&STR="",[自由型記録], 1,#s([自由型記録],&STR,"")),":",",")), #setq(&昭和年, #L(&STR)-#L(#s(&STR,",",""))), #setq(&秒, #cond(&昭和年>1, #num(#対応文字列(&STR,1))*60*60*1000+ #num(#対応文字列(&STR,2))*60*1000+ #num(#対応文字列(&STR,3))*1000+ &実行リターン, &昭和年>0, #num(#対応文字列(&STR,1))*60*1000+ #num(#対応文字列(&STR,2))*1000+ &実行リターン, &STR="", &実行リターン, 1, #num(&STR)*1000+ &実行リターン ))) 参考までに、数値を時間形式に替える計算式は #時間値([変換数値],5) | |||
17137 | 表引きによる方法 | pokopon | 2002/08/29-18:57 |
記事番号17096へのコメント まるさん こんばんは やっと全体像が見えてきました。(^^ゞ 今回の問題点として、「時間」の表示方法があります。 桐では時間値というのがありますが、 時:分:秒 の形式です。ですので、0分50秒01なんてものは 0:0:50.01と表示させれば計算は簡単です。 しかし、50.01と省略されると、ややっこしくなるわけです。 また、表引きする際には、データの形式がきちんと統一されている必要がありますので、 入力されたデータの形式が不備であれば文字列による表引きもうまくいきません。 たとえば、1分3秒45を「1:03.45」とすればよいのですが、「1:3.45」と入力されればうまく表引きできません。 そこで、やはり時間(秒)を計算しておくのが安全策です。 ■基準表.tblにおいて、下記の項目を増やしてください(自由形だけです)。 文字列 文字列 文字列 数値 [級] [基準値] [タイム1] 「タイム秒1」 1級 50.33 2級 1:02.22 3級 1:10.66 4級 2:01.00 計算式 [タイム1] #COND([基準値]<>#U,#COND(#文字位置([基準値],":")<1,"0:0:"+[基準値],1,"0:"+[基準値])) [タイム秒1] #時間数値(#時間値([タイム1]),3) そして、この基準表は、[タイム秒1]で昇順にデータが並んでいることが前提です。 「タイム秒1順」で並び替え条件名を設定しておきましょう。 ■競技.tblにおいて、下記の項目を設定してください。 文字列 文字列 文字列 数値 文字列 数値 [氏名] [自由型記録] [自由型級] [自由形タイム差] [タイム2] [タイム秒2] イアンソープ 1:00.56 1級 0.56 計算式 [タイム2] #COND([自由形記録]<>#U,#COND(#文字位置([自由形記録],":")<1,"0:0:"+[自由形記録],1,"0:"+[自由形記録])) [タイム秒2] #時間数値(#時間値([タイム2]),3) [自由型級] #表引き([タイム秒2],<=,"基準表.tbl",[タイム秒1],[級],"タイム秒1順") [自由形タイム差] #COND([自由形級]<>#U,[タイム秒2]-#表引き([タイム秒2],<=,"基準表.tbl", [タイム秒1],[タイム秒1],"タイム秒1順"),1,#U) もちろん、文字列型でも表引きは可能ですが、この場合には、入力するデータの形式を、 x:yy.zzzz と秒の部分を必ず「2桁」にする必要があります。 | |||
17138 | 表引きによらない方法 | pokopon | 2002/08/29-19:17 |
記事番号17096へのコメント よく考えたら、基準の級って、4級までなんでしょ。 だったら、表引きなんてせずとも、そのまま計算式で#CONDで場合分けをしたらどうでしょう。 競技.tblの構成は、既に示してありますので、それに従って、 計算式 [自由形級] #COND([タイム秒2]=#U,#U,[タイム秒2]<=50.33,"1級",[タイム秒2] <=62.22,"2級",[タイム秒2]<=70.66,"3級",[タイム秒2]<=121,"4級",1,#U) [自由形タイム差] #COND([自由形級]<>#U,[タイム秒2]-#COND([タイム秒2]=#U,#U,[タイム秒2] <=50.33,50.33,[タイム秒2]<=62.22,62.22,[タイム秒2]<=70.66,70.66,[タイム秒2]<=121,121),1,#U) で、表引せずとも、直接タイム差が計算できます。すなわち、"基準表.tbl"は不要です。 計算は、やはり秒に変換してから計算した方が無難でしょうか? 時間のデータ形式が h:mm:ss.ssに統一されていれば(自動で計算させていれば) #時間 という関数も使えると思います。 ただし、過去の計算(負)はできなかった?? ような。 その場合には、 -#時間 と符号を単に変えればよいと思います。 | |||
17139 | Re:表引きによる方法 | pokopon | 2002/08/29-19:19 |
記事番号17137へのコメント 補足ですが、 もちろん、項目を増やさなくとも計算式にすべて記述できるでしょうが、複雑になりますので、あえて、項目を増やした次第です。 こうして、データの変化を追えば、置換式の結果とか、関数の意味とか内容が理解できるかと思います。 | |||
17140 | Re:表引きによる方法 | 今村 誠 | 2002/08/29-20:23 |
記事番号17137へのコメント pokoponさんこんにちは、大変すっきりした式で見通しがよいのがいいです。 タイム2に整形して時間値を求める方法がよくわからなかったので、長い式を書いてしまいました。 マラソンなどで時間も考慮する必要があるときも考えて、以下のように変更したらいかがでしょうか。 >計算式 >[タイム2] > #COND([自由形記録]<>#U,#COND(#文字位置([自由形記録],":")<1,"0:0:"+[自由 >形記録],1,"0:"+[自由形記録])) #計算(#代入(&実行リターン, #文字数([自由型記録])-#文字数(#文字置換([自由型記録],":",""))), #cond(&実行リターン>1,[自由型記録], &実行リターン>0,"0:"+[自由型記録], 1,"0:0:"+[自由型記録])) | |||
17145 | Re:表引きによらない方法 | まる | 2002/08/31-08:45 |
記事番号17138へのコメント pokoponさん,今村さんアドバイスありがとうございました。 研究してみます。 |