パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Exchange Server、新年早々「2201010001」を long に変換できないエラー」記事へのコメント

  • by Technobose (6861) on 2022年01月03日 18時33分 (#4179165) 日記

     日付の比較で数字を数値に変換して判定してるんですね。意外。
     てっきり日付型に変換して比較してるかと思ってました。

     ところで、桁に意味を持たせたコードって一般的だと思うんだけど、それを数値に単純に数値として扱うのって一般的なのでしょうか。
     仕事で業務システム間で連携するデータをEUCでやれという状況になってて、Access+VBAでプログラムを作ってます。
     データ交換の資料がCSVの項目しか無かったりで、メーカーのSEと相談することが多いけど、自社製品でユーザーIDは8桁の数字としていて、各桁に意味を持たせたりしてるのに、交換用データにする時は数値として扱うのが普通みたいで驚いてます。

    • Microsoft CSVでは、「数値に見える文字列」は、たとえクォーテーションマークで括ってあっても数値として扱われます。
      そう言う事じゃないんでしょうか。

      親コメント
      • by Anonymous Coward

        Microsoft CSVだからではなくExcelという表計算ソフトだからですね。
        他の表計算ソフトでもそのような仕様があったりします。

    • by Anonymous Coward

      文字列にするのも同程度に一般的かと。

      # JavaScriptで64-bitの整数IDが化ける

      • by Technobose (6861) on 2022年01月03日 22時30分 (#4179255) 日記

        > JavaScriptで64-bitの整数IDが化ける

         ちょっと話は変わるけど、VBAは符号無しの数値型が無いですね。
         困ったのがutf-8で外字かどうかの判断。
         私用領域(外字範囲)の途中から補数で負になってしまうため、文字コードを範囲指定できないのですね。
         仕方なく正規表現で判断するようにしたけど、何か方法があるのかしら。

        親コメント
        • by Anonymous Coward

          utf-8なら8ビットでは?
          どういう符号化をしたら私用領域の途中から補数で負になるのか想像がつかない。

        • by Anonymous Coward

          Currency型を使うとか?

        • by Anonymous Coward

          8bitに限ってはByte型がある

          • by Anonymous Coward

            本当にUTF-8で8bit単位なら非ASCII文字はすべて負になるので「私用領域(外字範囲)の途中から」という説明と合わない。だからUTF-8とUnicodeの区別がついていないとかそういうレベルの混乱を疑っている

            • by Technobose (6861) on 2022年01月04日 7時00分 (#4179306) 日記

              > Unicodeの区別がついていないとかそういうレベルの混乱を疑っている

               御明察のとおりです。それとデータ交換する歳の外字についての話です。
               (文字集合でUnicode,文字エンコードでutf-8)のつもりでutf-8と書いてました(日本語でutf-8を使うならUnicodeだろうという思い込みで)。

              親コメント
      • by poly (42427) on 2022年01月04日 22時09分 (#4179452) 日記

        # JavaScriptで64-bitの整数IDが化ける

        つ BigInt
        https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_... [mozilla.org]
        # BigIntが使えないブラウザの対応を止めるのは駄目なんだろうなぁ

        親コメント
    • by Anonymous Coward

      各桁に意味を持たせたn桁の数字をIDとしたときに、CSVとして扱う過程で数値に変換されてバグるとか、まれによくあるやつですね。
      「12345678」を数値に直しても「123456789」のままだけど、「00001234」を数値に直すと「1234」になるので齟齬が生じるという。
      若いIDでテストしないと気付かないでスルーされちゃう。

      • Re:数字と数値 (スコア:4, おもしろおかしい)

        by Anonymous Coward on 2022年01月03日 19時18分 (#4179180)
        >>「12345678」を数値に直しても「123456789」のままだけど
        ちょっと待て
        親コメント
      • by Anonymous Coward

        > まれによくあるやつですね。

        さすがに桁数が増えるのはないかなぁ。

        • by Anonymous Coward

          たまにあるんやない? 昭和99年→昭和100年とか。

        • by Anonymous Coward

          つバージョン番号

        • by Anonymous Coward

          あるよ。CVEのシリアル番号。
          シリアル番号は4桁の0001から始まるが、
          CVE-YYYY-9999の次は、10000と5桁になる。

          • by Anonymous Coward

            CSVとして扱う過程で数値に変換されてバグる

    • by Anonymous Coward

      dnsのシリアルでは一般的な作法ですね。数値として(おおむね※)大小比較される前提で、日付を桁にエンコードします。

      ※単なる大小比較ではないので、注意。

      • by Anonymous Coward

        DNS のシリアルは unsigned なのよね。

    • by Anonymous Coward

      ISBN-10(9桁の数字+1桁のチェックディジット)みたいな罠があるので油断ならんね。
      実はまれに枝番があるとか。

    • by Anonymous Coward

      > 自社製品でユーザーIDは8桁の数字としていて、各桁に意味を持たせたりしてるのに

      こういうやり方だと長期間使うソフトウェアでは途中で桁の意味が変わったりしてトラブることがよくあるので
      要件として存在する場合、これとは別に真のユーザーIDを自動採番で作るのが普通ですね

    • by Anonymous Coward

      日付型が無い時代に作られたやつ相手にするソフトだと数値か文字列でくれ!と求められますからねぇ。

      >Access+VBA
      前世紀ですけど1/1/1〜9999/12/31を日の精度で扱えるように作った。
      10年前くらい同業のイトコからJavaのヤツにそれが載っかってると聞いて絶句…
      #作成者の名前くらい直せ…

      • by Anonymous Coward

        古くなくても通信プロトコルで日付型をそのまま使う/使える方が少ないだろ。
        NTPですらEra number導入してるんだから。

※ただしPHPを除く -- あるAdmin

処理中...