2019年6月16日日曜日

エクセルの消えないスタイルを消す方法


こんにちは。やっまむーです。

仕事上の書類ってどんな形式で作られていますかね?
私のところでは一覧表から設計書、スケジュール等も含めてエクセルで作られたものが多いです。
このような環境でよく目にするのが、いつの間にか追加されている大量の謎スタイル。

標準多すぎ・・・
別のファイルからシートをコピーしたりすると勝手に増えていきます。
普段は設計書等を書くためにエクセルを使ていてスタイル機能を使う事がないため気にしないのですが、ふと見たときに増殖を繰り返して大変な事になっています。
この現象は昔からあるようで、Microsoft公式や様々な方が削除用のマクロを公開するほどです。

ところが、この削除マクロを使っても消えないスタイルも少なからず存在します。
上段3つが呪いのスタイル
消そうとしても消えず、1セルでも他のファイルにコピーするとコピー先にも追加されるという極悪ぶり。
まるで呪いのようにつきまとうので、次第に全てのファイルが侵食されてしまいます。

消す方法を求めて

何とか消す方法がないか調べてみると、以下のような記事がありました。

Excelの呪い 消せないスタイルと外部リンクの強制削除

エクセルファイルをzip解凍して、中のファイルを直接編集するという方法です。
ただ、現場で使っているファイルにこの方法を試したところ、編集後のファイルが壊れて開けなくなってしまいました。
結局は不用意に他のファイルからコピーしないしか方法はないのかなと思っていました。

しかし、諦めきれず試行錯誤をしているとようやく安全に消す方法を見つけました。
やり方は非常にシンプル。

  1. スタイルの変更を選択
  2. スタイル名、書式設定を適当に変更する
  3. 一旦保存して、終了する
  4. 再度開きなおして削除を行う
すると、あの呪いのスタイルが消えています。
呪いが解けたぞー!!

おそらく、設定を変更して保存する事で破損した状態が修復されたのでしょう。
これで忌々しい呪いから解き放たれました!

皆さんも呪いのスタイルにお困りでしたら一度試してみてください。

ではではー。

2019年6月7日金曜日

久しぶりに電子申請してみた!

一年前、初めて電子申請した時のことを書きました。
それ以来、いろいろな手続きで電子申請を利用していますが、
昨年10月以来、久しぶりに、そして環境を移行したWindows10搭載PCでは初めて、
電子申請しようとしたところ、いくつか躓きました。

e-Gov側の変更


昨年11月、e-GovはJavaに依存しない方式へ変更されました。
これに伴い、「e-Gov電子申請アプリケーション」をインストール必要があります。
利用ガイドに記載されている手順に従い、インストールします。


「利用者クライアントソフト」のインストールを忘れてた!


e-Govで利用可能なブラウザは、これまでInternet Explorerだけでしたが、Edge、Firefox、Chromeもサポートされました。
今回は普段使用しているChromeから申請してみます。

申請手順は変わらないので、手続きを進め、マイナンバーカードによる電子署名を付与しようとすると、

「電子証明用の電子証明書が見つかりません。
申請届出に利用できる電子証明書を設定してください。また、電子証明書の
設定方法の詳細は、お手持ちの電子証明書の発行元認証局にご確認ください。」

と表示されました。













マイナンバーカードによる電子署名のためには、「公的個人認証サービスポータルサイト」で提供されている
「利用者クライアントソフト」が必要で、そのインストールを忘れていました。
「e-Gov電子申請講習会資料」にある「オンライン申請入門講座-利用準備編-」の平成28年度版を見て気づいたから
よかったものの、最新版にはこのことが記載されていないんですよね。


証明書選択画面が表示されるも・・・


ソフトのインストール後、電子署名を進めると、いつものように証明書の選択画面が表示されました。























しかし、「読込」を押すと、「証明書の取得に失敗しました。」のエラーが発生しました。












「公的個人認証サービスポータルサイト」に「Edgeで動作しない場合は、Internet Explorerを利用してください」と
書かれていたので、この結果は予想していました。Edgeで動作しないならChromeも同じでしょう。

結局、Internet Explorerで手続きをやり直し、無事完了しました。
電子証明書を利用するネットバンキングでの利用もあり、Windows10になってもInternet Explorerとの付き合いは
まだまだ続きそうです。

またいつか、どこかで。

2019年5月31日金曜日

Windows 10で、Windows 7のクラシック表示相当の環境にしてみよう

こんにちは、もりーです。

皆さんWindows 7からWindows 10への移行は進んでいますか?

つい最近、私の家のパソコンや、作業場のパソコンをWindows 10に
アップデートしたのですが、Windows 7と比べて色々と変わっていますね。
特に気になったのは、Windows 7時のクラシック表示(Windows クラシック)が
無くなっていたことでしょうか。

視覚効果機能により画面や操作が綺麗に見えることは素晴らしいと思いますが、
CPU・メモリ使用量が多くなってしまうため、私のような低スペックパソコンの
ユーザは、視覚効果機能を抑えたい傾向にあります。

また、スタートアップメニューが従来のものから一新されており、
使いづらく感じました。

今回、これらの設定を「可能な限り」過去Windows OS(過去のスタイル)のものに
近づける方法について、ご紹介したいと思います。

視覚効果機能OFFにする方法

1.[コントロールパネル]⇒[システム]⇒[システムの詳細設定]を開く。
2.[詳細設定]タブ⇒[パフォーマンス]内にある、[設定]を開く。
3.[視覚効果]タブ内にある、[パフォーマンス優先する]を選択し、[OK]を選択する。


設定前と比べ、画面の操作が少しスムーズになったと思います。

スタートアップメニューを変更する方法(Classic Shellを使用)

1.Classic Shell様のサイトからインストーラをダウンロードし、インストールする。
2.[スタートメニュー]⇒[Classic Shell]⇒[Classic Start Menu Settings]を選択する。
3.[Start Menu Style]タブを選択し、好みのメニュースタイルを選択する。



4.[Language]タブを選択し、[jp-JP]を選択し、[OK]を選択する。



5.[スタートメニュー]⇒[Classic Shell]⇒[Classic Explorer Settings]を選択する。
6.[Language]タブを選択し、[jp-JP]を選択し、[OK]を選択する。




どうですか?視覚効果を抑え、スタートアップメニューを変更したことにより、
操作性が向上したように思えます。

自分に合った設定が一番ですし、Windows 10のスタイルは使いづらいと
感じた方は、是非試してみてください。

ではでは

2019年5月24日金曜日

Excelで クラシックスタイルメニュー が表示されない(ClassicMenuタブが出ない)

こんにちは、ふじかーです。

先日、自社で使用しているPCの入れ替えがあり
・Windowsは 7 → 10
・Officeは 2010 → 2019
バージョンアップされました。

さてOffice/Excelについて、そのままではリボンが不便なので
以前書いた
Excel作業がもっと捗るように
の記事手順に従って
また クラシックスタイルメニュー for Office 2016 を入れる事にします。

for Office2016 になってますけど、きっと2019でも使えるでしょう。
いそいそと手順通りにインストールすると・・・

ClassicMenuタブが出ない…!!(´・ω・`)

なにー!!これはツラい!
for Office 2016 だから??と開発元をみても、for 2019は無い様子。
最新環境じゃ使えないのか? リボンを使うしかないのか―・・

っと諦めかけましたが、
調べたところ解決方法が見つかりました。


復旧手順


  1. Excelが起動している場合、一旦Excelを終了する
  2. アドインファイルの置き場を開く

    クラシックスタイルメニューのツール一式内にある「アドインフォルダを開く.vbs」を実行すると


    アドインファイルを保存したフォルダが開きます。
     
  3. 「ClassicMenu.xlam」ファイルを右クリックし、「プロパティ」を開く
  4. セキュリティ:の項目にチェックを入れて[OK]を押下


    プロパティ内の セキュリティ:の項目には
      このファイルは他のコンピューターから取得し
      たものです。このコンピューターを保護するた
      め、このファイルへのアクセスはブロックされる
      可能性があります 
    という記載があり、
    横に「許可する」というチェックボックスがあります。

    このチェックボックス、環境によっては
    「ブロックの解除」というチェックボックスだったり、
    ボタンになってたりするようです。
    チェックを入れ、OKを押下してプロパティを閉じましょう。
  5. Excelを起動し、「Classic Menu」タブが表示されることを確認
    お~出た出た。Excelが新しくなって、
    ちょっとツールアイコンが判り辛かったりしていますが、まぁこのくらいは我慢。
どうやら、どこかのWindowsUpdateでExcelのセキュリティ強化されたようですね。
勝手な事をしおってからに。

たぶん他のアドインとかも邪魔される事でしょう。
同じような境遇の方がいれば、参考にして下さいな。

2019年5月20日月曜日

クロスケーブルはもういらない


こんにちは。よっしーです。

最近は無線化が進んでいますが、有線LANを繋ぐことって結構ありますよね。

で、私、以下のアイテムをいつもカバンに入れて持ち歩いていたんですけど、

皆さん、これ、なんだかわかります?


はい。知る人ぞ知る「ストレート/クロス変換コネクタ」です。

LANケーブルのストレートケーブルに接続すると、クロスケーブルになり、

逆に、クロスケーブルに接続すると、ストレートケーブルになる。

という、夢のようなアイテムです。


たまにPC同士でLANケーブルを繋いで、データのやり取りをするときに、

ストレートケーブルはあっても、クロスケーブルがなくて困る時があるんですね。

もう、うん十年ぐらい前に買ったものですが、いざという時に役に立ちました。


で、ここからが本題なのですが、

2000年前後から、ネットワーク機器は、LANケーブルがストレートかクロスかを

自動で判断して、どちらのケーブルが接続されても、正しく通信できるように

なってるんですよ。


お恥かしい話ですが、これを知ったの、ここ2,3年の話なんです。


2000年前後の古いネットワーク機器なんて今更使ってないんで、

基本的にはもうどちらのケーブルでも通信できるんです。。。


なので、この情報を知ってからは、変換コネクタを持ち歩くことはなく、

今では机の中にしまい込んでいるのですが、

たまたま目にしたもんですから、今回のブログネタにしてみましたw


LANケーブルなんて昔からあるし、ストレートとクロスも普通に売っているので、

不変的なものだとばかり思っていましたが、便利になるものですね。


ではまた~。

2019年5月11日土曜日

Visual Studio Codeの便利なショートカットキー

こんにちは、やっまむーです。

皆さんはソースコードを書く時にエディタは何を使っていますか?
私は、C言語を書く機会が多かったので秀丸エディタで書くことが多かったです。

最近VisualStudioCodeを使ってC言語をステップ実行する機会がありました。

Visual Studio Code でC言語をステップ実行

その際にソースコードを少し書いてみたのですが、
秀丸エディタとショートカットが違っていたので使いにくさを感じて挫折してしまいました。

ただ、そこで終わってしまうのは勿体ないなと。
ちゃんと使った上で、自分にとって良いものか判断しようと思いました。

というわけで、VisualStudioCodeでコードを書く時に知っておくと便利なショートカットについてまとめてみました。

種別操作ショートカットキー
基本操作コピーCtrl + C
基本操作切り取りCtrl + X
基本操作貼り付けCtrl + V
基本操作元に戻すCtrl + Z
基本操作やり直しCtrl + Y
基本操作検索(現在のファイル)Ctrl + F
基本操作置換(現在のファイル)Ctrl + H
基本操作複数ファイル検索Ctrl + Shift + F
基本操作複数ファイル置換Ctrl + Shift + H
基本操作選択行の先頭に移動Home
基本操作選択行の末尾に移動End
基本操作次の検索候補F3
基本操作前の検索候補Shift + F3
基本操作シンボルの名前変更F2
基本操作カーソル行を下に移動Alt + Down
基本操作カーソル行を上に移動Alt + Up
基本操作行コメントの切り替えCtrl + /
基本操作定義に移動F12
基本操作定義をプレビューAlt + F12
基本操作指定行に移動Ctrl + G
エディタ操作エディターを閉じるCtrl + W
エディタ操作エディターを分割するCtrl + \
エディタ操作一番左のエディターにフォーカスCtrl + 1
エディタ操作2番目のエディターにフォーカスCtrl + 2
表示ズームインCtrl + ;
表示ズームアウトCtrl + -
表示ズームのリセットCtrl + NumPad0
表示フォントのズームCtrl + MouseWheel
(設定の"Mouse Wheel Zoom"にチェック)

ここに挙げたもの以外にも便利なショートカットキーはたくさんあります。
また、ショートカットの設定を変更できるので、自分好みにカスタマイズもできます。

「慣れ親しんだものがベスト」「新しいものはよくわからなくて使いにくい」と一蹴せずに、
ちゃんと使ってから判断できる柔軟な考えでいたいですね。

ではまたー!

2019年5月3日金曜日

Excel2013のリボンメニュー「挿入」を選択すると落ちる!

どうも、もりもりです。

4月に入ってからExcelやWordの挙動がおかしくなりました。

困っている方も多いと思いますし、会社のPCでも発生する可能性があるので
備忘録として残しておきます。

Officeのバージョンは2013です。

現象


  ・Excelでリボンの挿入タブを選択すると落ちる
  ・Excelの開発タブにある「Visual Basic」や「マクロ」が無効になって使用できない
  ・Wordを起動すると下記の警告が出る
    「 実行しようとしている機能には、マクロまたはマクロ言語のサポートを必要とするコンテンツが含まれています。ただし、ユーザーまたは管理者がこのアプリケーションをインストールしたときに、マクロまたはコントロールのサポートはインストールしないように設定されています。」

原因


  ソースネクストのZERO スーパーセキュリティでした。
  マクロが使えない状況なのでセキュリティソフトを疑ってOFFにしてみると
  使用できるようになりました。

  調べてみるとやはり皆さん同じ現象でお困りのようでした。
  (下記URL参照)
  https://answers.microsoft.com/ja-jp/msoffice/forum/all/%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BC%E3%82%BB/b406617f-48df-4da9-b01b-887221708fa2

対処法


  パネル - 保護 - 高度な防御の設定 - 除外設定
  ※「パネル - 保護 - ウイルス対策の設定 - 除外設定」では何も変わらなかったので調べてみると上記でした。



  下記のOffice実行ファイルを追加しましょう。



  Officeの場所は下記です。
  (※Officeバージョンは2013で64bit版です)

  C:\Program Files\Microsoft Office 15\root\office15
  ・EXCEL.EXE(Excel)
  ・WINWORD.EXE(Word)
  ・POWERPNT.EXE(PowerPoint)
  ・ONENOTE.EXE(OneNote)
  ・OUTLOOK.EXE(Outlook)

  とりあえずよく使うOfficeのアプリはチェックを入れておいていいと思います。
  もちろん挙動がおかしいと思った時でもいいですが。


以上、もりもりでした~

2019年4月26日金曜日

「Windows10」ストレージ取り外しポリシーのデフォルトが「クイック削除」に



 こんにちは。よっしーです。


USBメモリなどをPCから抜き取るとき、

「ハードウェアの安全な取り外し」って皆さん実施してますか?








正直、面倒くさいですよね。別にこれをしてもしなくても、

ハードウェアが壊れるようなことにもなりませんし。。。


そもそも、なんでこの「安全な取り外し」をする必要があるかというと、


ファイルコピーなど、何かしらデータをメディアへ書き込む場合、

取り外しポリシーの設定によって、OSが書き込む内容をキャッシュし、

画面上はコピーが終わったことになっていても、

内部的には書き込みを行っている。という状態があります。



その状態でメディアを抜き取ってしまうと、実際にはメディアへ

書き込んでいる途中となるため、書き込みに失敗し、データが壊れたり、

正しくコピーされないことになります。


「安全に取り外すことができます」というメッセージは、


『キャッシュされたデータが最後までメディアに書き込まれたこと』

を表しており、書き込み中に抜き取られることを防ぐための機能なのです。


で、この「取り外しポリシー設定」ですが、今までの Windows10 では

書き込みキャッシュをを行う「高パフォーマンス」という設定が既定でした。


しかしながら、この「安全な取り外し作業」をユーザーにやらせるのは

あまり流行らなかったようで「Windows 10 October 2018 Update」にて、

書き込みキャッシュを使わない「クイック削除」という設定が既定となりました。


この設定だと、メディアへの書き込みに時間がかかるようになったものの、
(※画面上の話で実際にコピーできるまでの時間はあまり変わらないはず。)

画面上のコピー表示が終われば、即、メディアを抜き取ることが可能です。


今まで「安全な取り外し」を、お作法的にやっていた人も多いかと思いますが、

やっぱり手間ですので、ちゃんとポリシー内容を理解した上で、

安全な取り外しを行わず、安全なタイミングでUSBなど引っこ抜くようにしましょう。


ではまた~。

2019年4月18日木曜日

オンライン環境でプログラムを組んでみよう!

こんにちは、もりーです。

昨年度、会社の若い子にC言語を教える機会があり、
その中で簡単なプログラムを組んでもらったり、内容に問題ないか、説明するために
デバッグをしたい場面が何度かありました。

デバッグをするにも、統合開発環境などをインストールしたりするのが非常に面倒くさく、
簡単にできないものかと色々調べていたのですが、今はオンラインで
プログラムを組んで、コンパイルや実行したりすることができることを知りましたので、
簡単に紹介させて頂きたいと思います。

オンラインでプログラムを組めるサイト

 codinggound:https://www.tutorialspoint.com/codingground.htm

リンク先からスクロールして頂くと、各言語のメニューが表示されます。
















今回はC言語の紹介をさせて頂きますが、コンソールアプリケーションであれば、
VB.NETやC#のプログラムを組むこともできるようです。

C言語のボタンを押下すると、C言語のエディタ画面が表示されます。


















適当なprintf文を追加して実行してみましょう。
編集後、画面左上のExecuteボタンを押すと、コンパイルと実行を
行ってくれるようです。























しっかり開発したい場合はVisualStudioなどの統合開発環境を使用した方が
良いと思いますが、簡単なプログラムを組む場合などには
十分使えそうですね。

ではでは。

2019年4月15日月曜日

Nintendo Switch を外出先でもテレビ出力する!「ACアダプタいら~ず」


こんにちは、ふじかーです。

遊んでますか? Nintendo Switch。

ウチの息子も「スマブラ」やら「にゃんこ大戦争」やら
Switchのゲームで毎日楽しそうに遊んでいます。


さてこのSwitch、ご存知の通り
 ・自宅ではテレビにつないで 据え置き機 として
 ・外出先では 携帯機 として
両方楽しめる人気のゲーム機ですが

実家や親戚の家にSwitchを持って遊びに行ったとき
「そこのテレビに映したい」
となると、
これが残念ながらHDMIケーブルだけでは出力できません。

悲しいかな大画面テレビの前のテーブルで
ちっさい画面で遊ぶご家庭も多いんじゃないでしょうか。

テーブルモード というそうです

自宅のテレビにつないでいる 純正ドック や ACアダプタ ごと
持っていけば当然できるんですが、

いちいちコンセントやHDMIケーブルなど配線を外すのも面倒だし
ドックもACアダプタも結構大きいので持っていくのも大変。



そんなわけで 純正ドックを使わずHDMI出力する環境 を準備したときのお話。


ACアダプタいら~ず


純正ドック以外で、Switch 本体から HDMI出力する機器を探すと
変な日本語説明のあやしい中華製変換アダプタ
とか
純正ドックをばらして回路基板を取り出し、付け替えるためのスタンド
とか
いろいろ怪しいのがでてくるんですが

その中でも一番まともそうなお店として、今まで何度か買い物したことのある
秋葉原の「サンコーレアモノショップ」の変換アダプタ「ACアダプタいら~ず」を購入。

こんな商品

まぁ変換アダプタ自体は 他の怪しい中華製品 と同じOEMのようですが
 ・何かあったときにサポートしてくれそう
 ・HDMIケーブル、USB給電ケーブルなどの付属品がついている
  (他の類似製品は安いけどアダプタ単体なので、別途付属品の購入が必要)
という事で、こちらをAmazonでポチリ。


本当に「ACアダプター要らず」なのか?


さてこちらの製品の特長。

他製品は大体
「純正のACアダプタを使用してね」
という商品が多いんですが

モバイルバッテリー や テレビのUSBポートUSB(5V/1A以上)に
付属のUSBケーブルを繋げば
「ACアダプタ無しでゲームできますよ」
というもの。

ただAmazonのレビューでは、電力不足で使用できないことが多い様です。

テレビのUSBポートには出力記載が見当たらず解らなかったですが
製品が届き テレビのUSBポートにつないで試したものの、案の定テレビには何も表示されません。

純正ACアダプタを使用すると安定してテレビ出力されました。流石純正。


USB充電器を使うという結論


やはりテレビのUSBポートは電力不足なんでしょう。
ただ純正ACアダプタは前述の通り嵩張るし
充電済みモバイルバッテリーを毎回用意するのも嫌です。

結局、下記のUSB急速充電器を用意しました。
Anker 24W 2ポート USB急速充電器

テレビのUSBポートの電力不足は織込み済み。
その場合の手段として、これが安定動作することを事前に調べていました。


ここから給電して試したところ、問題なくテレビ出力成功!

とても小さいので、1セットSwitchケースに忍ばせておけば
出先のテレビの大画面で、皆でゲームを楽しむことができます。


興味がある方は、試してみて下さいな。

2019年4月5日金曜日

Windows 7からWindows 10にアップグレードしてみた!

Windows 7の延長サポート終了まで1年を切り、Windows 10への移行を真剣に考えなければならない時期になってきました。
ということで、Windows 7からWindows 10へのアップグレードにチャレンジしてみました。

Windows 10に無料でアップグレードできる!?


Windows 10への無償アップグレード期間はとっくに終了していますよね。
しかし、マイクロソフトのサイトからツールをダウンロードすると、無償でアップグレードできるようです。
なぜそうなっているのかはよく分かりません。

・Windows 10のダウンロード
https://www.microsoft.com/ja-jp/software-download/windows10


アップグレード開始!そして、安定のエラー発生


ダウンロードしたMediaCreationTool1809.exeを実行します。

「このPCを今すぐアップグレードする」を選択して進めます。






























途中、以下のディスプレイドライバーの警告画面が表示されましたが、「確認」を押して、そのまま進めました。






























PCが再起動され、Windows 10のインストールが進んでいるようでしたが、途中で中断され、Windows 7が起動してきました。
ログインすると、

0x800F0955 - 0x20003
INSTALL_UPDATES 操作中にエラーが発生したため、インストールはSAFE_OSフェーズで失敗しました

というエラー画面が表示されました。






























それならばと、ディスプレイドライバーを削除&再インストールした後、再度Windows 10をインストールしてみると、警告画面は表示されなくなったものの、結果は同じでした。

正解発表


検索してみたところ、最初に「このPCを今すぐアップグレードする」ではなく、「別のPCのインストール メディアを作成する」を選択して、インストールメディアを作成しなければならないようです。作成したインストールメディアのセットアップを実行し、その上で、更新プログラム等のダウンロードを「今は実行しない」ようにして進めれば、無事にWindows 10をインストールすることができました。(インストールにかかった時間は3~4時間です。)































おまけ


アップグレード後、Excelファイルを開こうとしたところ、一瞬開いたのち、終了するという現象に見舞われました。
一瞬開いたExcelのタイトルバーを確認すると、

XXXXX.xls [互換モード] - Excel(非商用目的) (ライセンスのない製品)

と表示されていたので、Excelの修復を実行しました。




























修復後にExcelファイルを開くと、ライセンス認証画面が表示されました。






































情報を入力し、無事Excelファイルを開くことができました。

またいつか、どこかで。

2019年3月29日金曜日

A5:SQLの便利機能

どうも、ひさびさのもりもりです。

はい、もりーとは別人です。

はい。

早速ですが、最近知った、衝撃的だったニュースです。

今回はA5:SQL Mk-2の便利な機能を紹介したいと思います。
というより、このツールをもう何年も使ってるのですが全然知らずで。。。

その機能というのが、「ソース文字列生成」と「コードストリッパー」です。

えぇぇぇぇぇっ!?
そんなん知らんかったん!?!?!?

というお声はナシでお願いします。。。

はい、知らなかったのです。。。
私もショックでした。。。
今まで、サクラなどのテキストエディタに貼っ付けて、矩形選択や正規表現の置換を駆使して頑張ってました。。。
はい。。。
まぁそんな駆使するほど難しいことでもないのですが、今回紹介する「ソース文字列生成」と「コードストリッパー」が
これまた便利のなんのって!

ご存知の方は無視してください。

ソース文字列生成


下記のようなSQLがあるとします。

SELECT *
  FROM TABLE_A
 WHERE COL1 = 'XXXX'

これをソースコードにSQL文の文字列としてコピペしたい!

そんなときはA5:SQLのSQLエディタで下記を実行するだけ!

1.SQLを選択



2.右クリック → ソース文字列生成 → ルールを選択
  ※今回はC#を例に挙げます。



3.生成された文字列を確認



4.ソースを貼り付け

var sb = new StringBuilder();

sb.Append("SELECT * ");
sb.Append("  FROM TABLE_A ");
sb.Append(" WHERE COL1 = 'XXXX' ");


そうです。
これだけなんです。

なんで今まで誰も教えてくれなかったんや~~~!!!
(いや、自分でメニューじっくり見ろよ。。。って話ですよね!すんません!)

今回はStringBuilder用の文字列を指定しましたが単純な文字列の連結やカスタムルールで作成することも可能です。

・単純な文字列の連結

var sql =
    "SELECT * "
    + "  FROM TABLE_A "
    + " WHERE COL1 = 'XXXX' ";

・カスタムルール
  先頭に「sb.AppendLine($" 」を付けて、「 ")」で閉じる



var sb = new StringBuilder();
var name = "MORI";

sb.AppendLine($" SELECT * ");
sb.AppendLine($"   FROM TABLE_A ");
sb.AppendLine($"  WHERE COL1 = '{name}' ");


サンプルのように数行だけなら全然エディタでの置換でもいいのですが、数十行のSQLになると矩形選択がまぁ面倒ですわね。
でもこれならイッパツでできます!

コードストリッパー


次は逆パターンで、ソースコードからSQLだけを抜き出します。

1.ソースのコピー

sb.AppendLine($" SELECT * ");
sb.AppendLine($"   FROM TABLE_A ");
sb.AppendLine($"  WHERE COL1 = 'XXXX' ");

2.A5:SQLのSQLエディタに貼り付けて選択



3.右クリック → コードストリッパー → XXXXのソースから~を選択



4.SQLを確認


ホンマこのツール、フリーとは思えない!

ご存知でない方は今すぐにでもご使用ください!

ではまた~



2019年3月24日日曜日

Windows電卓の実装を見てみる


お久しぶりです。やっまむーです。
プログラミングの練習で電卓を作ったことってありませんか?
私も最初の頃にコマンドライン上で動作する簡単な練習アプリを作ったことがあります。
四則演算するだけのものでしたが、動いたときは楽しかった事を覚えています。

3月6日にMicrosoftが「Windows電卓」をオープンソース化してGithubで公開しました。
たかが電卓、されど電卓。
前々から気になっていた、
「Windows電卓は普通に考える電卓と比較して何が違うのか」
を調べてみようと思います。

ソースコードを入手

さっそくGithubからソースコード一式を入手します。
https://github.com/Microsoft/calculator
公開後も更新されています

計算処理を探そう

続けてVisualStudioでソリューションを開きます。
なんか色々います。

UWP(ユニバーサルWindowsプラットフォーム)に対応しており、ソースコードはC++で書かれています。


調べていくとCalcManagerに計算関連の処理がまとめられていました。
この中で四則演算処理をしているのはscioper.cppのCCalcEngine::DoOperation()になります。

引数で演算子(operand)と左辺、右辺の数値(lhs、rhs)を受け取り、計算をしています。
左辺、右辺の型であるRationalクラスは次のようになっています。

m_p、m_qと値を二つ持っています。
なぜ二つあるのかはわかりませんが、それを意識せずに使うためにオペレータのオーバーライドを行っています。
例えば加算処理であれば、以下のようになっています。

CEngine/Rational.cpp
Rational operator+(Rational lhs, Rational const& rhs)
{
    lhs += rhs;
    return lhs;
}
Rational& Rational::operator+=(Rational const& rhs)
{
    PRAT lhsRat = this->ToPRAT();
    PRAT rhsRat = rhs.ToPRAT();

    try
    {
        addrat(&lhsRat, rhsRat, RATIONAL_PRECISION);
        destroyrat(rhsRat);
    }
    catch (DWORD error)
    {
        destroyrat(lhsRat);
        destroyrat(rhsRat);
        throw(error);
    }

    *this = Rational{ lhsRat };
    destroyrat(lhsRat);

    return *this;
}
RatPack/rat.cpp
//-----------------------------------------------------------------------------
//
//    FUNCTION: addrat
//
//    ARGUMENTS: pointer to a rational a second rational.
//
//    RETURN: None, changes first pointer.
//
//    DESCRIPTION: Does the rational equivalent of *pa += b.
//    Assumes base is internal throughout.
//
//-----------------------------------------------------------------------------

void addrat( PRAT *pa, PRAT b, int32_t precision)

{
    PNUMBER bot= nullptr;

    if ( equnum( (*pa)->pq, b->pq ) )
        {
        // Very special case, q's match.,
        // make sure signs are involved in the calculation
        // we have to do this since the optimization here is only
        // working with the top half of the rationals.
        (*pa)->pp->sign *= (*pa)->pq->sign;
        (*pa)->pq->sign = 1;
        b->pp->sign *= b->pq->sign;
        b->pq->sign = 1;
        addnum( &((*pa)->pp), b->pp, BASEX );
        }
    else
        {
        // Usual case q's aren't the same.
        DUPNUM( bot, (*pa)->pq );
        mulnumx( &bot, b->pq );
        mulnumx( &((*pa)->pp), b->pq );
        mulnumx( &((*pa)->pq), b->pp );
        addnum( &((*pa)->pp), (*pa)->pq, BASEX );
        destroynum( (*pa)->pq );
        (*pa)->pq = bot;
        trimit(pa, precision);

        // Get rid of negative zeros here.
        (*pa)->pp->sign *= (*pa)->pq->sign;
        (*pa)->pq->sign = 1;
        }

#ifdef ADDGCD
    gcdrat( pa );
#endif

}
こうして見るとなかなか興味深く、他の処理も解析すると勉強になりそうです。
また、UWPアプリの参考にもいいと思います。
皆さんもお時間があれば是非とも解析してみてはいかがでしょうか。

それではまた~。