Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[要望] 12時34分56秒とか12:34:56みたいなのが貼り付けられた時に良い感じに解釈して入力欄に展開して欲しい。 #4

Open
arigayas opened this issue Jun 25, 2022 · 11 comments
Assignees
Labels
enhancement New feature or request

Comments

@arigayas
Copy link
Owner

コスト

12時34分56秒

入力欄に1対1なのでそんなに考えずに出来そう。

12:34:56

12:34:56は、12:45というパターンはどうするのか熟慮する必要があるので面倒そうです。

@arigayas arigayas added the enhancement New feature or request label Jun 25, 2022
@arigayas arigayas self-assigned this Jun 25, 2022
@arigayas
Copy link
Owner Author

arigayas commented Jul 6, 2022

とあるニコ生主さんにこのissueを見せたら正規表現を考えてくれました。
/(?:([\d0-9]{1,9})[::時])?(?:([\d0-9]{1,9})[::分])([\d0-9]{1,9})秒?/

このコードを参考にして組んでみます。

@arigayas
Copy link
Owner Author

TimeCalculator.zip
12時34分56秒に対応したテスト版。
貼り付け可能箇所は時間欄のみです。

@arigayas
Copy link
Owner Author

arigayas commented Jul 17, 2022

う~ん……リセットボタンを押してからなら大丈夫ですが
2回続けて貼り付けると秒の欄の数値が消えるっぽいですね・・・。

つまり、

  1. 時間欄に「12時34分56秒」を貼り付けます。
  2. 「12」時間「34」分「56」秒になる。
  3. 「12」時間の「12|」のカーソルの位置の状態で「12時34分56秒」を貼り付けると
  4. 「1212」時間「34」分「」秒になる。
  5. 「1212」時間「34」分「」秒の状態で「1212|」のカーソルの位置の状態で「12時34分56秒」を貼り付けると
  6. 「121212」時間「」分「」秒になる。

@arigayas
Copy link
Owner Author

1. 時間欄に「12時34分56秒」を貼り付けます。

2. 「12」時間「34」分「56」秒になる。

3. 「12」時間の「12|」のカーソルの位置の状態で「12時34分56秒」を貼り付けると

4. 「1212」時間「34」分「」秒になる。

5. 「1212」時間「34」分「」秒の状態で「1212|」のカーソルの位置の状態で「12時34分56秒」を貼り付けると

6. 「121212」時間「」分「」秒になる。

3.の所でブレイクポイントを置いて時間欄に貼り付けた直後の(処理される前の)値を見たら
「'1212時34分5'」となっていて9文字を超えたので最後の6秒が消えて
そのために「5」はよくわからないもの扱いになってしまい空文字に置き換わってしまったようです。
この感じだと書き直しだなぁ・・・。

仕様として入力欄には9文字までしか許可していないのです。

@arigayas
Copy link
Owner Author

現時点(2022年7月18日午前3時28分)でのソースコード

` if TRegEx.IsMatch(TLabeledEdit(Sender).Text, '([\d]{1,9}時)') or
TRegEx.IsMatch(TLabeledEdit(Sender).Text, '([\d]{1,9}分)') or
TRegEx.IsMatch(TLabeledEdit(Sender).Text, '([\d]{1,9}秒)') then

begin
  Str := TLabeledEdit(Sender).Text;
  if TRegEx.IsMatch(Str, '(?:([\d]{0,9})時)') then
    StrList[0] :=  StringReplace(TRegEx.Match(Str, '(?:([\d]{0,9})時)').Value , '時', '', [rfReplaceAll])
  else if Length( StrList[0] ) = 0 then
    StrList[0] := '0';

  if TRegEx.IsMatch(Str, '(?:([\d]{0,9})[::分])') then
    StrList[1] := StringReplace(TRegEx.Match(Str, '(?:([\d]{0,9})分)').Value , '分', '', [rfReplaceAll])
  else if Length( StrList[1] ) = 0 then
    StrList[1] := '0';

  if TRegEx.IsMatch(Str, '([\d]{0,9})秒?') then
    StrList[2] :=   StringReplace(TRegEx.Match(Str, '([\d]{0,9})秒').Value , '秒', '', [rfReplaceAll])
  else if Length( StrList[2] ) = 0 then
    StrList[2] := '0';


  HourLabeledEdit.Text   := StrList[0];
  MinuteLabeledEdit.Text := StrList[1];
  SecondLabeledEdit.Text := StrList[2];

  StrList[0] := '';
  StrList[1] := '';
  StrList[2] := '';
end;`

@ryutaro
Copy link

ryutaro commented Jul 17, 2022

1. 時間欄に「12時34分56秒」を貼り付けます。

2. 「12」時間「34」分「56」秒になる。

3. 「12」時間の「12|」のカーソルの位置の状態で「12時34分56秒」を貼り付けると

4. 「1212」時間「34」分「」秒になる。

5. 「1212」時間「34」分「」秒の状態で「1212|」のカーソルの位置の状態で「12時34分56秒」を貼り付けると

6. 「121212」時間「」分「」秒になる。

3.の所でブレイクポイントを置いて時間欄に貼り付けた直後の(処理される前の)値を見たら 「'1212時34分5'」となっていて9文字を超えたので最後の6秒が消えて そのために「5」はよくわからないもの扱いになってしまい空文字に置き換わってしまったようです。 この感じだと書き直しだなぁ・・・。

仕様として入力欄には9文字までしか許可していないのです。

Delphiに詳しくないので できなかったらごめんなさい
C-vを盗んでクリップボードを読みに行き、許可された書式であれば読み込み処理する
許可されていない書式であれば無視するって動きにすれば改善できそうです

全然わかんないのであってるかとか バージョンの差異とかは分からないけど 一応参考おいておきます

キーイベントの取得
http://blog.livedoor.jp/toymap/archives/18215232.html
クリップボードへのアクセス
http://delfusa.main.jp/delfusafloor/archive/www.nifty.ne.jp_forum_fdelphi/faq/00058.htm

@arigayas
Copy link
Owner Author

コメントありがとうございます。
互換性を大事にしてるDelphiなので古い情報でもたぶん動くと思います。(←新しいやり方を知らないままになる可能性大ですが)
でもマウス操作からの「貼り付け処理」を考えるのが初級者なオイラには、ちと腰が重いですがやってみようと思います。

@ryutaro
Copy link

ryutaro commented Jul 17, 2022

TimeCalculator.zip 12時34分56秒に対応したテスト版。 貼り付け可能箇所は時間欄のみです。

ぱっと思いつくだけやってみました 抜け等あるかもしれませんが動作した値と動作しなかった値です

分離に成功したデータ値

データ値
1時間
01時間
1分
01分
1秒
01秒
1時間1分
01時間01分
1時間01分
01時間1分
12時間34秒
123分4秒
123分56秒
123秒
12秒
1秒
23時45分67秒
12時

動作しなかったデータ値

入力値 表示値 補足
1日23時間45分67秒 23時間45分 文字数制限超過
12:34:56 12:34:56 時分秒フォーマットとして確実に分離できるフォーマット
12min 12min 分離されない
12m 12m 分離されない
12min34 12min34 分離されない
12m34 12m34 分離されない
12min34sec 12min34sec 分離されない
12min34s 12min34s 分離されない
12h34m56s 12h34m56s 分離されない

@ryutaro
Copy link

ryutaro commented Jul 17, 2022

コスト

12時34分56秒

入力欄に1対1なのでそんなに考えずに出来そう。

12:34:56

12:34:56は、12:45というパターンはどうするのか熟慮する必要があるので面倒そうです。

12:34:56は基本的には右詰 (eg. 12:34は12分34秒) で良いと思います
12:34で12時間34分に対応させるには 桁シフトボタンみたいなの用意すれば良いかと

@arigayas
Copy link
Owner Author

ぱっと思いつくだけやってみました 抜け等あるかもしれませんが動作した値と動作しなかった値です

分離に成功したデータ値
データ値
1時間
01時間
1分
01分
1秒
01秒
1時間1分
01時間01分
1時間01分
01時間1分
12時間34秒
123分4秒
123分56秒
123秒
12秒
1秒
23時45分67秒
12時

動作しなかったデータ値

入力値 表示値 補足
1日23時間45分67秒 23時間45分 文字数制限超過
12:34:56 12:34:56 時分秒フォーマットとして確実に分離できるフォーマット
12min 12min 分離されない
12m 12m 分離されない
12min34 12min34 分離されない
12m34 12m34 分離されない
12min34sec 12min34sec 分離されない
12min34s 12min34s 分離されない
12h34m56s 12h34m56s 分離されない

テストパターンを考えていただきありがとうございます。
動作しなかったデータ値で1つ目以外に対しては何もコードを書いていないので、
そりゃ分離も何もされないですし、そもそも英語対応の要望は無かったです(´;ω;`)

@arigayas
Copy link
Owner Author

12:34:56は基本的には右詰 (eg. 12:34は12分34秒) で良いと思います

なるほど。そのようにコーディングします。

12:34で12時間34分に対応させるには 桁シフトボタンみたいなの用意すれば良いかと

ボタンを置く場所も無いですし、そこまではしないつもりです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants