C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■2639  Re[14]: VC++6.0での動作につきまして
□投稿者/ daisuky -(2006/02/24(Fri) 09:40:34)

    分類:[VC++] 

    2006/02/24(Fri) 09:41:43 編集(投稿者)
    2006/02/24(Fri) 09:41:34 編集(投稿者)

    スイマセン、柘植さんのように全て読めていませんが、問題は解決したのでしょうか?

    桁数がずいぶんと大きいようです。

    解答の方向が見当違いであれば申し訳ないのですが、
    こうしたデータを取り扱うのであれば、外部文書の丸め等々確認される前に、
    標準の仕様を確認されたほうが良いと思います。ネットではなく、Excelのヘルプに仕様は記載されています。
    エクセルのマニュアルを見た限り、以下のような仕様が記載されていました
    ・列の幅 255 文字
    ・有効桁数 15 桁
    ・処理できる正の最大値 9.99999999999999E307

    頭が良くない私は、指数表示が良くわかりませんが、取り扱う数値の範囲はこれを超えているようです。
    エクセルに
    1001011101100001100
    を普通に入力しても桁落ちしています。
    元々、数値としては処理できる量を超えています。

    一方、仕様のひとつとして、「列の幅255文字」(列の幅に、文字っておかしな表現ですが)が記載されています、つまり、15桁の数値より多くなっても、255文字までなら文字として取り扱えるということだと思います。
    残念ながら、数値として計算させるなら、Excelというアプリケーションを選択すべきではなったと言わざるを得ない状況かと思います。


    ただ、一方で、Excelのような物自体を作るとおっしゃっています。
    桁数を超えるところでの動きを実現できるといいですね。C++でそのようなアプリを作ろうとされるのはうらやましいです。


    希望されている仕様は、ちょっと伝わりづらくなっていますが、次のような感じでしょうか。
    「業務アプリでCSVを出力している。それはお客様に渡したい。お客様が自由にこのファイルを開いて欲しい。それはReadonlyで一度きりの文書ではなくて、そのまま編集に使われる。」
    >このとおりであれば、仕様にかかるので、Excelでは無理ってことですね…。

    数値としてデータを扱うつもりが無いなら、セルの書式設定であらかじめ、
    文字列書式にしておけばすむ問題な気もします。(CSVじゃなくて、そういう書式付のデータとして生成しておく)

    何度も言いますが、数値としてExcelで取り扱うのは無理ですよ。


    正常な「'」は、Excelの特殊機能の文字列宣言としてのシングルクヲート以外に、通常のデータとして入力されることがあると思います。データとしての「'」ということです。Replace関数で一気にやっちゃうと、それも失われるよ、ってことをお伝えしたいのだと思います。


    散文、駄文失礼しました…。
記事No.2593 のレス /0過去ログ3より / 関連記事表示
削除チェック/

■2636  Re[13]: VC++6.0での動作につきまして
□投稿者/ 柘植 -(2006/02/24(Fri) 00:34:49)

    分類:[VC++] 

    2006/02/24(Fri) 00:37:45 編集(投稿者)

    あ、どうも。柘植です。
    思い通りいったようですね。おめでとうございます。

    で、てこなさんの長〜いお返事、ざっと読ませていただきました。
    どうやら、「CSVファイルをエクセルで開いたときに何が起こっているか」、「エクセルから保存の操作をしたときに何が起こっているか」ということが全く分かっていらっしゃらないようですね。(CSVファイルとエクセルのファイルの違いもわかっていないご様子)
    簡単に少しだけ説明しますと、ダブルクリックでCSVファイルを開いた場合、カンマで区切られた項目について、エクセルが勝手に処理を施しています。
    例えば、
    「住所」,「番地」というレイアウトの住所録をCSVで作ったとして、

    1件目:C県D町,12-3Eアパート6号室
    2件目:A県B町,1-1

    の2件のデータだったとします。
    これをダブルクリック等でエクセルで開くと、2件めの2項目めは「エクセルが勝手に」日付と判断して、「平成18年1月1日」とか表示してくれるはずです。(未確認)
    それをそのまま保存すれば、当然データは

    1件目:C県D町,Eアパート6
    2件目:A県B町,平成18年1月1日

    自分は会社の健康診断担当者さんとか地方自治体職員さんとか相手の仕事が多かったもので、データとしてこういったものをもらってよく泣いています。(汗)

    掲示板で全部説明するのは無理ですし、場合によっては某電気屋さんのパソコン教室で金とって教えてる内容な気がするので、このようなヒント程度にとどめておきます。(掲示板で質問しなくても勉強できるはずだと思います。google先生と1日語り合ってみるとか)

    ちなみに、中博俊さんご指摘の

    >そのCSV使い物にならなさそうな感じはしますが(^^;

    に関しては、エクセルで開く以外には使えない、という意味です。
    折角VC++の勉強をしてらっしゃるのですから、CSVファイルを読み込んで集計するプログラムでも作ってみてはいかがでしょう?
    で、サンプルデータの中に
    ="1001011101100001100"
    の形で出力したデータが紛れ込んでいたら、、、(創造するだけで恐ろしい。そんな仕事したくない、、、)
    ついでにこんなデータを入れておくと更に勉強になるでしょう。
    1200,"1200",'1200,'1,200,="1200",="1,200"

    か、可能な限り手短にレスしたつもりです、、、

    では、がんばってください。
記事No.2593 のレス /0過去ログ3より / 関連記事表示
削除チェック/

■2634  Re[12]: VC++6.0での動作につきまして
□投稿者/ てこな -(2006/02/23(Thu) 22:23:00)

    分類:[VC++] 

    こんばんは、てこなです。

    ご指摘くださったみなさま、大変お待たせして申し訳ございません。
    この文章を作成した際は整形してますが、掲示板に反映した際正しく
    表示される自身がなく、その点におきましてご容赦頂ければ幸いです。
    (正しくとは、段落とか etc)

    まず管理者様へ
    結論と致しましては「解決」ですが、まだてこなにご指摘くださった方へ
    調査し可能ならば報告したいと考えておりまして、
    それが報告できた(できないと判断した)際に「解決(表示)」をしたいと考えておりますがいかがでしょう
    か?
    投稿した当初は削除命令が来るのではないか・・と、ビクビクしておりましたが、
    今となって、てこなにこのような機会を与えてくださり、まことにありがたく思って
    おります。

    ご指摘くださったみなさまへ
    皆様のご指摘内容は、次の<試行錯誤>に記載してありますが、
    指摘したとおり認識してくれてない!などございましたら、
    よろしければ再度ご指導頂ければ幸いなのですが・・・・・、
    皆様の貴重なお時間をこれ以上割いていただくのも申し訳ないようにも感じます・・
    ・・。
    相変わらずうまく表現できず、みなさまに伝わっているか大変不安ではありますが、
    あくまで、みなさまの都合最優先で、
    もし都合がよろしければご指南していただけるとうれしいです。

    急いでおりませんので、お手すきの際にでもご指南していただけると幸いです。
    よろしくお願い致します。

    「解決」を表示させるタイミングで再度お礼申し上げたいと思っております。


    <試行錯誤>

    【L/Dさまご指摘につきまして】

    L/Dさまのご指摘にしたがって確認したつもりですが、認識の相違などございました
    ら、
    その都度よろしければご指摘をお願い致します。

    ⇒ 下記ファイル(txt)を作成し、次のように作業をしてみました。
    (1レコードにカンマで区切られた2つのデータ × 4レコード)

    1001011101100001100,1001011101100001100, // 現状のCSV
    '1001011101100001100,1001011101100001100, // 前のみシングルクォート付加
    1001011101100001100,'1001011101100001100, // 後のみシングルクォート付加
    '1001011101100001100,'1001011101100001100, // 前後ともに付加

     ダブルクリックで開かずに、
     [データ]-[外部データの取り込み]-[テキストファイルのインポート]で実行してみ
    ました。
     テキストファイルウィザードが起動しまして、
    1/3 [ データのファイル形式:カンマや〜を選択 ]
    2/3 [ 区切り文字:カンマにチェック ]-[ 文字列の引用符:『'』シングル
    クォート選択 ]
    3/3 [ 完了]
     
     文字列の引用符の指定(2/3)において、次の観点から実行してみました。
    @『'』シングルクォートを選択しない場合
    <結果:セル表示>
    A        B
    1 1.00101 E+18        1.00101 E+18
    2 '1001011101100001100        1.00101 E+18
    3 1.00101 E+18        '1001011101100001100
    4 '1001011101100001100        '1001011101100001100

    ・セルA1をクリックして数式バーに内容を表示させてみると、
     「1001011101100001100」→「1001011101100000000」となりデータが欠落して
     しまってますが、セルA2では『'』シングルクォートにより、データが欠落し
    ていませんでした。

    A『'』シングルクォートを選択する場合
    <結果:セル表示>
    A        B
    1 1.00101 E+18        1.00101 E+18
    2 1001011101100001100,1001011101100001100,        なし
    3 1.00101 E+18        1001011101100001100,
    4 10,010,111,011,000,000,000,000,000,000,000,000,000,        なし

    ・セルA1をクリックして数式バーに内容を表示させてみると、
     「1001011101100001100」→「1001011101100000000」となりデータが欠落して
     しまってます。
    ・セルA2はデータが削られていないものの、
     1つ目と2つ目の間のカンマは区切り文字として認識されていないように感じました。
    ・セルA4ですが、書式が自動的に通貨になってしまい・・・・・
     セル8個の書式を全て確認しましたが、セルA4以外は標準でした。
     セルA4の書式を標準に戻しても、1.0010111011E+37となり・・・・・
    ・セルB2とセルB4は空でした。

    <考察>
    『'』シングルクォートを付加することで、データの欠落はなくなったように感
    じていたのですが、
    考慮が漏れていまして、連続するデータの場合思惑通りにいかない様に感じまし
    た。

    【Okuminさまご指摘につきまして】

    『'』シングルクォートを外すマクロ(VBA)のようですが、
    てこなの認識が間違っていたらその都度ご指摘をお願い致します。

    記載してくださったマクロで範囲は別途拾うとして、
    『'』シングルクォートを消すことは出来ると思いますし、
    やり方として、次のように感じました。

    @CSVファイルをダブルクリックEXCELに展開し、マクロを記述して実行させ
    る。
    この場合マクロになれていない方がCSVファイルの中身を参照するには、
    少し手間がかかってしまうような気がしました。

    A先にマクロを登録しているEXCELファイルを作成しておいて、
    CSVファイルをマクロ登録済みファイルにドラッグ・・・・・できませんでし
    た。

    B先にマクロを登録しているEXCELファイルを作成しておいて、
    作成したEXCELファイルをダブルクリックして、[ファイル]-[開く]で対象CSVを開
    き、
    展開が終わったら、マクロを実行する。
    但し、対象のCSVファイルを開く際に、テキストファイルウィザードが立ち上
    がり、
    区切り方法を設定しなければならなく、出来ればその辺の操作は避けたいと感じ
    ています。
    (避けたい→てこながやる分には問題ないのですが、
     てこな以外の使用者を考慮・・・・・考慮できるほどの実力がてこなにはない
    ような・・・・)

    Okuminさまはマクロに詳しそうなので、恐縮ですがよろしければお伺いさせてくださ
    い。
    C(コンソールアプリ程度のLV)でEXCELを操作することは出来るのでしょう
    か?
    操作というのは、単に「cells(1,1).value = "お願いします"」や「マクロの自動記
    述」、
    出来れば「マクロ実行と同様の動きを行わせる」など・・・・
    インターネットで検索してもなかなか望みどおりのページを見つけることが出来ませんでした。
    CとEXCEL関連の参考書もいろいろ探してみましたが、見つけることが出来ませんでし
    た。

    余談ですが、
    前にマイクロソフトの技術者情報?で、「VC++6.0 MFCでEXCELを作成するには・・
    ・(英語)」を
    見つけることが出来たぐらいです。
    (この記事がCを始めたきっかけの1つです。完全な機能を有するEXCELではなく、
     セル構造と列の最大256を増やしたい。EXCELがインストールされていなくても
    表示ぐらいは
     出来るようなEXCELもどき?がつくれれば、どんなに業務的に楽になるか・・・・
    ・って考えてました。
     そのようなフリーソフトも見つけることが出来ず(インストール有はありましたが、

     インストール無は見つけることが出来ませんでした)・・・・・些細な情報でも構いませんのでよろしければ
    ご指摘いただければ、
     うれしいです)
    閑話休題(とりあえずMFC関連と思いますので)

    ロータス云々の話はとても興味深かったです。
    周りにこういう背景を知っている方が殆どおらず、非常にためになりました。
    ありがとうございます。

    【中博俊さまご指摘につきまして 】

    申し訳ございません。
    ご気分を害されないかとても不安ですが、わからないことを放置するのがちょっと嫌
    なので、
    書きます。ご指摘内容で「正常な『'』」という表現が勉強不足でちょっとピンとき
    ていません。
    皆様がご指摘してくださった内容の検証は、業務の合間などで時間を見つけて
    進めることが出来るのですが、平日は調査(書店で参考書を漁ったり)する時間が取
    れそうもなく、
    週末日曜でもお休みが取れれば、読み漁ってこようと思いますので、
    検証は少しお時間を頂ければと思い書き込ませていただきました。

    【柘植さまご指摘につきまして】

    「Excelファンクラブ」はてこなもよく拝見させていただいているサイトです。
    特にVBA関連では大変勉強になりました。

    「="」で実施してみました。思惑通りにいきました。ありがとうございます。

    当初の目的が、汎用ホストの帳票を紙に出力した場合大量になってしまい、
    見づらいのでEXCELで見やすく出来れば・・・でしたので、大変感謝しております。

    ただ、中博俊さまがご指摘してくださっている「そのCSV使い物にならなさそう」・
    ・・
    というのが気になり次のような検証をして見ました。そもそも認識が違う!!
    とかございましたら、適宜お手すきの際にご指摘いただけると幸いです。

    ⇒ 次のようなCSVファイルを作成しました。

    ="1001011101100001100",="1001011101100001100"

    そのCSVファイルをダブルクリックし、EXCELに展開しますと次のように表示され
    ます。
    <結果:セル表示>
    A        B
    1 1001011101100001100        1001011101100001100

    セルA1をクリックして数式バーを見ると、「="1001011101100001100"」となって
    います。

    但し、そのまま保存しようとすると「〜CSV(カンマ区切り)と互換性のない機能が含まれて〜」
    との警告が出て、
    そのまま保存すると、次のようになってしまいます。
    (機能を保存するには、「いいえ」をクリックしてから、最新のExcelのファイル形
    式で保存します。
     とありますが、最新のExcelファイルっていったい・・・・)

    保存ファイルをテキストエディタで参照してみると、

    1001011101100001100,1001011101100001100

    となってしまい、このCSVファイルをダブルクリックしEXCELに展開すると次のよ
    うになってしまいます。
    <結果:セル表示>
    A        B
    1 1 E+18        1 E+18

    セルA1をクリックし、数式バーで確認してみると、
     「1001011101100001100」→「1001011101100000000」となりデータが削られて
    しまいます。

    <考察>
    表示するまでは正しく見えるが、表示されているデータを修正して保存して
    しまうと、
    CSVファイルとしては使い物にならなくなってしまう・・・・・・で認識
    はよろしいのでしょうか?

    【daisukyさまご指摘につきまして】

    テキストファイルの作成〜のご指示通り実施し、思惑通りの表示内容になることが確
    認できました。ありがとうございました。

    また、「再現できなかった」とご指摘がございましたが、申し訳ございません。
    てこなの方で値(桁数)はあまり影響がないような気がしまして、
    ご指摘を下さる方に対し少しでも負担を減らせないかと、
    簡略してしまいました。事象が出てしまったケースとは異なる記載をしておりまし
    た。
    申し訳ございません。てこなの考えが間違っておりました。

    記載ケース        事象ケース
    「10000000300」 → 「1001011101100001100」 でよろしければお願い致します。

    お手数おかけいたしまして、申し訳ございませんでした。

    以上

記事No.2593 のレス /0過去ログ3より / 関連記事表示
削除チェック/

■26843  Re[19]: 四捨五入でバグ発見
□投稿者/ Jitta on the way -(2008/10/22(Wed) 07:44:55)
    No26842 (ラウンドワン さん) に返信
    > doubleを使った場合に近似値で処理されるのがしょうがないというのが
    > プログラマーの常識ということを知れたのは勉強になりましたが
    >
    > 下記プログラムののdoubleをdecimalに修正すれば、正常に動作するみたいなのですが
    > なぜdoubleを使っているのでしょうか
    > これには、何か理由があるのでしょうか。
    そんな単純じゃないよ。プログラムで扱う、リテラルも含んだ全ての数値を decimal にしないと、double になったとたんに発症する。
    希望する桁の1つ下を四捨五入してから、希望する桁を処理するのがいいかな?

    -----

    それはともかく。小数点以下3桁でもう信頼性がなくなるんだっけ?IEEE フォーマットって、2進化してから小数点移してますよね?0.555555*10^3 じゃなく、0.100010101110001…*2^10 でしたよね?仮数部は53桁あるけど、溢れのマルメが小さい方向に向かうのかな?
記事No.26728 のレス /過去ログ49より / 関連記事表示
削除チェック/

■66151  C# でビット反転の方法を教えて下さい
□投稿者/ ビビット -(2013/04/03(Wed) 20:21:40)

    分類:[C#] 

    お世話になります。

    string s = "1001000101100";
    とあるとき、下位1バイトを反転して1を加え、
    結果的に16進数D4を得たいのですが、
    どうにもやり方がわかりません。


    以下、考え方だけですが(違っていたらご指摘ください)
    ・反転するのですから、0110111010011となる
    ・下位1バイトなので、11010011 が対象。
    ・これに1を加えると、11010100 となる。


    「~」を使うのだとは思うのですが、
    初心者なのでどう表現すればよいか分かりません。
    ご教授いただけませんでしょうか?


    何卒よろしくお願いいたします。
親記事 /過去ログ112より / 関連記事表示
削除チェック/

■82955  Re[2]: バイナリエディタでDoubleを探す方法
□投稿者/ 魔界の仮面弁士 -(2017/02/21(Tue) 11:14:29)
    No82952 (774RR さん) に追記
    > 1.000000000000 と
    > 0.999999999999 と
    > 1.000000000001 とは違う数値になっちゃう。
    
    1.000000000001 は、内部的には (2^0 +2^-40 +2^-44 +2^-45 +2^-48 +2^-49) 相当ですね。
    
    「^」は、VB/VBA の冪演算子。(C# だと Math.Pow)
    
    
    Double バイナリを 2 進数で表記
    
    1.000000000000 → 0 01111111111 0000000000000000000000000000000000000000000000000000
    0.999999999999 → 0 01111111110 1111111111111111111111111111111111111101110011010001
    1.000000000001 → 0 01111111111 0000000000000000000000000000000000000001000110011000
    
    0.99999999999999978 → 0 01111111110 1111111111111111111111111111111111111111111111111110
    0.99999999999999989 → 0 01111111110 1111111111111111111111111111111111111111111111111111
    1.00000000000000000 → 0 01111111111 0000000000000000000000000000000000000000000000000000
    1.00000000000000020 → 0 01111111111 0000000000000000000000000000000000000000000000000001
    
    
    上記の Double バイナリを 10進小数に復元
    
    1.000000000000 →  1.00000000000000000000000000000000000000000000000000000
    0.999999999999 →  0.99999999999900002212172012150404043495655059814453125
    1.000000000001 →  1.00000000000100008890058234101161360740661621093750000
    
    0.99999999999999978 → 0.99999999999999977795539507496869191527366638183593750
    0.99999999999999989 → 0.99999999999999988897769753748434595763683319091796875
    1.00000000000000000 → 1.00000000000000000000000000000000000000000000000000000
    1.00000000000000020 → 1.00000000000000022204460492503130808472633361816406250
記事No.82950 のレス /過去ログ141より / 関連記事表示
削除チェック/

■85811  Re[4]: 指数表記する方法
□投稿者/ 魔界の仮面弁士 -(2017/11/26(Sun) 19:36:47)
    No85807 (ちゃんころ さん) に返信
    > Public Const diele As Single = 8.85418782E-12#
    > というのが
    > Public Const diele As Single = 0.00000000000885418782
    > というのに変わってしまいます。
    
    VB のエディタは、極力、小数表記で記述しようとするためです。
    その境目となるのは、おそらく指数部の桁数でしょう。
    
    Double 型リテラルの場合、E+14〜E-16 の範囲は小数表記、その範囲外が指数表記になり、
    Single 型リテラルの場合、E+6〜E-8 の範囲が小数表記、その範囲外が指数表記になります。
    Decimal 型リテラルはの場合は、すべて小数表記にフォーマットされます。
    
    
    > どうすれば良いですか?
    
    今回の「8.85418782E-12」という表現からして、有効桁数 9 桁の値を表現したいようですが、
    Hongliang さんから指摘のあるとおり、Single 型ではこの精度の値を扱うことはそもそも出来ません。
    どう修正すべきかは、求める要件によって変わりますが、有効桁数 9 桁が本当に必要なら、
    As Double にするか、As Decimal にする必要があるでしょう。
    
    より正確に言えば、
    Double 型の仮数部の幅は、53+1ビット≒15.95 桁分であるのに対し、
    Single 型の仮数部の幅は、23+1ビット≒7.225 桁分しかないということです。
    ちなみに Decimal 型の場合は 96 ビット幅なので、約 28.89888 桁です。
    
    有効桁数 9 桁の値を Single 型で管理するには有効桁数が不足してしまい、
    どうあっても、格納時には近似値に丸められることになるでしょう。
    
    確認のため、「8.85418782E-12」相当の近似値を Single 型で表現してみましょうか。
    先に言っておくと、誤差が最小になるのは 3 番です。
    
    《Single のバイナリ表現》
    1: 0b00101101000110111100001110110110
    2: 0b00101101000110111100001110110111
    3: 0b00101101000110111100001110111000
    4: 0b00101101000110111100001110111001
    5: 0b00101101000110111100001110111010
    
    《上記を 10進小数で表現した値》
    1: 0.00000000000885418648122193729932405403815209865570068359375
    2: 0.000000000008854187348583675287727601244114339351654052734375
    3: 0.000000000008854188215945413276131148450076580047607421875
    4: 0.000000000008854189083307151264534695656038820743560791015625
    5: 0.00000000000885418995066888925293824286200106143951416015625
    
    
    ちなみに上記を diele.ToString("R") でラウンドトリップ出力した場合、
    1: 8.85418648E-12
    2: 8.854187E-12
    3: 8.854188E-12
    4: 8.854189E-12
    5: 8.85419E-12
    となります。
    
    いずれも E-8 を下回る指数表現であるため、この場合は自動変換が起こりません。
     Public Const Sample1 As Single = 8.85418648E-12F
     Public Const Sample2 As Single = 8.854187E-12F
     Public Const Sample3 As Single = 8.854188E-12F
     Public Const Sample4 As Single = 8.854189E-12F
     Public Const Sample5 As Single = 8.85419E-12F
    
    もともと扱おうとしていた「8.85418782E-12F」という値は、
    2 番と 3 番の間になり、Single の精度では表現しきれません。
    そのため、より近い値である 3 番の表記に変換されたということです。
    (有効桁数ってそういうものですよね)
    
    
    > Doubleでも試してみたのですが
    
    同様に、「8.85418782E-12」の Double 値による近似値表現を見てみます。
    こちらの場合は、3 番が同一値となります。(格納誤差はありません)
    
    
    《Double のバイナリ表現》
    1: 0b0011110110100011011110000111011011110001011001000110011010111010
    2: 0b0011110110100011011110000111011011110001011001000110011010111011
    3: 0b0011110110100011011110000111011011110001011001000110011010111100
    4: 0b0011110110100011011110000111011011110001011001000110011010111101
    5: 0b0011110110100011011110000111011011110001011001000110011010111110
    
    《上記を 10進小数で表現した値》
    1: 0.0000000000088541878199999971451928483766392647021092887626991796423681080341339111328125
    2: 0.00000000000885418781999999876077998226927144218532939046184537801309488713741302490234375
    3: 0.000000000008854187820000000376367116161903619668549492160991576383821666240692138671875
    4: 0.00000000000885418782000000199195425005453579715176959386013777475454844534397125244140625
    5: 0.0000000000088541878200000036075413839471679746349896955592839731252752244472503662109375
    
    《R 書式によるラウンドトリップ出力》
    1: 8.8541878199999971E-12
    2: 8.8541878199999988E-12
    3: 8.85418782E-12
    4: 8.854187820000002E-12
    5: 8.8541878200000036E-12
    
    
    そして先述した通り、Double 型で E-12 の範囲は小数表記されるため、
     Public Const Sample1 As Double = 8.8541878199999971E-12R
     Public Const Sample2 As Double = 8.8541878199999988E-12R
     Public Const Sample3 As Double = 8.85418782E-12R
     Public Const Sample4 As Double = 8.854187820000002E-12R
     Public Const Sample5 As Double = 8.8541878200000036E-12R
    と書いても
     Public Const Sample1 As Double = 0.0000000000088541878199999971R
     Public Const Sample2 As Double = 0.0000000000088541878199999988R
     Public Const Sample3 As Double = 0.00000000000885418782R
     Public Const Sample4 As Double = 0.000000000008854187820000002R
     Public Const Sample5 As Double = 0.0000000000088541878200000036R
    に変換される結果になりますね。
記事No.85804 のレス /過去ログ147より / 関連記事表示
削除チェック/

■93889  Re[3]: UTF-8の全角文字読み込み
□投稿者/ 魔界の仮面弁士 -(2020/02/17(Mon) 11:24:01)
    2020/02/17(Mon) 11:24:34 編集(投稿者)

    No93886 (tani さん) に返信
    > また、&#159296;(utf8mb4の文字)はC#上でも4バイトのため、2回に分けて格納されるということでしょうか?

    これは「くさかんむり」に「細」な文字ですよね。
    C# ではこのように書けます。

    // 下記の 2 つは同一の文字列を意味する
    string s1 = "\U00026E40";
    string s2 = "\uD85B\uDE40";


    10進数で 159296 ということは
    16進数で 26E40
    2 進数で 100110111001000000
    と表せます。


    No93888 において、U+10000〜U+1FFFFF の範囲の Unicode 文字が
    4 バイトで表されると書きましたが、この変換規則については、
    下記の「UCSからUTF-8への変換法」などが参考になるかと思います。
    http://nomenclator.la.coocan.jp/unicode/ucs_utf.htm
記事No.93883 のレス /過去ログ162より / 関連記事表示
削除チェック/

■100576  Re[4]: SpringのTransactionalについて
□投稿者/ 伝説のカレー -(2022/09/21(Wed) 10:40:06)
記事No.100570 のレス /過去ログ175より / 関連記事表示
削除チェック/

■101110  Re[5]: webView2を使いtextBoxの変数をname属性へ
□投稿者/ 魔界の仮面弁士 -(2023/01/07(Sat) 00:23:20)
    No101109 (sendmsg さん) に返信
    > string msg = textBox2.Text;
    > msg.Replace("'", "\\'");
    > await webView21.ExecuteScriptAsync("document.getElementsByName('mail')[0].value = 'msg';") ;

    いや、これじゃ駄目ですよ。

    Replace は「置換した結果の文字列」を返すメソッドであって、
    変数 msg の中身を書き換える効果はありません。

    なにより、「〜.value = 'msg';」は、変数 msg の出力ではなく、
    文字列「msg」を出力することになってしまいます。


    string rawText = textBox2.Text;
    string escText = rawText.Replace("'", "\\'");
    await webView21.ExecuteScriptAsync($"document.getElementsByName('mail')[0].value = '{escText}';") ;

    などとします。
記事No.101103 のレス /過去ログ176より / 関連記事表示
削除チェック/

■101113  Re[6]: webView2を使いtextBoxの変数をname属性へ
□投稿者/ 魔界の仮面弁士 -(2023/01/07(Sat) 12:20:27)
    No101110 (魔界の仮面弁士) に追記
    > string escText = rawText.Replace("'", "\\'");

    別案として、AddHostObjectToScript メソッドを使った実装例を書いてみます。

    このメソッドを通じて公開したオブジェクトは、JavaScript 側から
    chrome.webview.hostObjects のメンバーとして公開されるので、
    C# と JavaScript の間で、プロパティやメソッドとしてデータ交換ができます。

    これなら、Replace などによる文字列のエスケープ処理を意識する必要もありません。


    public partial class Form1 : Form
    {
     public Form1()
     {
      InitializeComponent();
      InitializeAsync();
     }

     private Example sendmsg;
     async void InitializeAsync()
     {
      await webView21.EnsureCoreWebView2Async(null);
      sendmsg = new Example { txt = textBox1 };
      webView21.CoreWebView2.NavigationCompleted += (sender, e) =>
      {
       webView21.CoreWebView2.AddHostObjectToScript("sendmsg", sendmsg);
      };
      webView21.CoreWebView2.Navigate("https://www.yahoo.co.jp/");
     }

     private async void button1_Click(object sender, EventArgs e)
     {
      await webView21.ExecuteScriptAsync("(async()=>document.getElementsByName('p')[0].value=await chrome.webview.hostObjects.sendmsg.GetText())();");
     }

     [ClassInterface(ClassInterfaceType.AutoDual)]
     [ComVisible(true)]
     public class Example
     {
      public TextBox txt { get; internal set; }
      public string GetText() => txt.Text;
     }
    }
記事No.101103 のレス /過去ログ176より / 関連記事表示
削除チェック/

■101111  Re[5]: webView2を使いtextBoxの変数をname属性へ
□投稿者/ sendmsg -(2023/01/07(Sat) 00:28:51)
    2023/01/07(Sat) 00:29:11 編集(投稿者)

    No101110 (魔界の仮面弁士 さん) に返信

    初心者ですみません。
    できたと思い焦って投稿しちゃいました。
    ありがとうございます。
記事No.101103 のレス / END /過去ログ176より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -