[PowerShell] 連想配列をソートしてforeachで一個づつ取り出す
PowerShell で連想配列を用いた時のソート&foreach のサンプルがなかなか探せなかったのでメモします
とある連想配列
PS C:\> $tbl = @{
>> k00 = "orange";
>> k01 = "peach";
>> k02 = "apple"
>> }
出力は簡単
PS C:\> $tbl
Name Value
---- -----
k01 peach
k02 apple
k00 orange
ソートの出力も簡単
PS C:\> $tbl.GetEnumerator() | Sort-Object Value
Name Value
---- -----
k02 apple
k00 orange
k01 peach
# もしくは
PS C:\> $tbl.GetEnumerator() | sort Value
Name Value
---- -----
k02 apple
k00 orange
k01 peach
これを一つづつ取り出して処理したい
単に foreach で取り出すとき
PS C:\> foreach( $k in $tbl.Keys ){
>> Write-Output $k
>> Write-Output $tbl[ $k ]
>> Write-Output '-----'
>> }
k01
peach
-----
k02
apple
-----
k00
orange
-----
さらにソートして foreach で取り出すとき
PS C:\> $tbl.GetEnumerator() | sort Value |
>> ForEach-Object{
>> Write-Output $_.Name
>> Write-Output $_.Value
>> Write-Output '-----'
>> }
k02
apple
-----
k00
orange
-----
k01
peach
-----
ForEach-Object を使いました ただの foreach() でも出来ると思うんですけど、私的用途が満たせたので、これ以上は調べてないです
検索で、「powershell foreach ソート -perl」 などで検索しても、日本語の情報があまり出てこなかったので、参考になれば幸いです(^^)
[PowerShell] 32bitと64bitの使い分け
PowerShellにはちゃんと 32bit版と 64bit版が備わっています
Windows2008 R2
Windows2012 R2
共に同じ場所にあります(~o~)
64bit版
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
32bit版
C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe
デフォルトの64bitマシンであれば、コンソールで
> powershell
とすると、64bitモードが立ち上がります
これはどういうことかというと、64bitのアプリから使うライブラリなどは、64bitでないとダメってことです
何にはまったかというと、PowerShell から System.Data.OracleClient に接続するとき
たとえDBサーバが 64bit Oracle だったとしても
Oracle Client はデフォルトでは 32bit になっているようです
powershell から oracle に接続しようとしたときこんな感じになります
# アセンブリのロード
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient")
# 接続
$conn_str = "Data Source=saoDB;User ID=sao;Password=password;Integrated Security=false;"
$ora_conn = New-Object System.Data.OracleClient.OracleConnection($conn_str)
# インスタンス
$ora_cmd = New-Object System.Data.OracleClient.OracleCommand
$ora_cmd.Connection = $ora_conn
# データベースに接続
$ora_conn.Open()
(参考)powerShellからOracleを使う(接続・切断)
http://harikofu.blog.fc2.com/blog-entry-114.html
このDB接続直後に、64bit のPowerShell だと
こんなエラーが出ます
"0" 個の引数を指定して "Open" を呼び出し中に例外が発生しました: "Oracle クライアント ライブラリを読み込もうとしましたが、BadImageFormatException が発行されました。この問題は、32 ビットの Oracle クライアント コンポーネントが
インストールされている環境で 64 ビット モードを実行すると発生します。"
発生場所 行:1 文字:22
+ $ora_conn.Open <<<< ()
+ CategoryInfo : NotSpecified: (:) []、MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
問題解決方法は2つ
- Oracle Client を 64bit版をインストールする(たとえDBサーバ上であっても…
- 呼び出す側のPowerShellを 32bit版にする
既存の稼働環境に影響を与えない様にするという意味では
不毛ですが後者を選択すると波風立てずにコトを済ませられます
[Oracle]テーブル・カラム名が不明でもDBに入っている値を検索したい
見知らぬデータベースを渡され、中を解析したい時…
ありますよね?ありますよね!?
全テーブルの全列に入っている値を横断検索したいという要求、あるんじゃないでしょうか?
探したら同じことを考えている人が居ました
- 全テーブルの全列の値の検索方法について - Oracle Community
https://community.oracle.com/thread/2334738?tstart=0
方法は2種類
一つは dmp 出力して、テキスト検索 をするというもの
だいぶ力技ですけど、確かに、確実に検索できますね…
もう一つの方法は、PL/SQL で全データを総検索 するというもの
この方法、
やってみると、良い感じに動きます
お勧めです
テーブル名やカラム名が判らなくても、動きますしね!
めっちゃ感激したので、この記事にも SQL を載せておきます
このサンプルでは、全ての値に 「あ」 が入っているデータを検索します
どのテーブルの、どのカラムに、何件入っているかが判ります
う、嬉しい~!!!
|
|
DBの構造を解析するツールは結構探せばあるのですが、データの中身となると、調べるのは手間ですよね…
このSQLには助けられました~
話は変わりますが、
DB系のクライアントツールで、わたしがよく使っているのは A5:SQL Mk-2 (フリーソフト)です
- A5:SQL Mk-2 : SQL Development Studio
http://a5m2.mmatsubara.com/
Oracle, SQLServer, MySQL など多くのDBに対応しています
一番うれしいのは、Oracle への接続に、Oracle Client が無くても接続できる所ですね
OCI経由か、直接 IPアドレスなどを指定して接続するかを選択できる!!
ER図も自動生成してくれるし、
めっちゃ、現場で役立ってます
[C++/CX] MVP Community Camp 2014大阪で「VC++まわりの非同期処理」セッションしました
MVP Community Camp 2014大阪にて、VC++系のセッションをさせて頂きました
MVP Community Camp 2014大阪会場
http://atnd.org/event/E0024087
(リンク先は削除されている模様です)
当日利用した資料はこちら!
pptx版はこちら ←セッション時の私的メモが欄外に載っています
PDF版はこちら
序盤はわたしの追体験発表みたいになってしまいました
同じような疑問を持っている人や、その人なりの解釈の手助けになる様であればと思って記載しています
後半部分は、VC++での非同期処理の触りだけになっていますが
非同期での例外や中断など、C++/CXのWIndowsストアアプリでは興味深い仕組みが色々あるので
この続きになる情報も、もっと自分なりに勉強して発信していきたいなー
Anonymous Struct of C
Hi,
It is very tedious to think about the name of a struct when you use to struct only once.
In such a case, Anonymous structure comes in handy.
It is assigned to the anonymous struct
|
|
This code is very straightforward!
This method is effective only when there is no necessity that you use 2 times and this structure.
[Git] ローカルを強制上書きして、作業をなかったことにしたい
ローカルの作業が何やらおかしくなったから
リモートのファイル内容に戻したい~という時
以下のコマンドでさくっと戻りました
|
|
ツールなどで強制的にsyncさせようとしても
failed to sync this branch
という悲しいお知らせが出て、結局 Git Bash に行くことになりますので……
(参考リンク)
gitでリモートのブランチにローカルを強制一致させたい時
http://qiita.com/ms2sato/items/72b48c1b1923beb1e186How to reset my local repository to be just like the remote repository HEAD
http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head
C,C++,C++/CLI sample program
Hi,
C program
|
|
compile
> cl.exe c00.c
C++ program
|
|
compile
> cl.exe /EHsc c01.cpp
C++/CLI program
|
|
compile
> cl.exe /clr c02.cpp
That is very interesting!
Lightning Talk:How to program C++/CX
Hi,
The other day, I spoke about C++/CX in Lightning Talk.
Click here for article
Take care!
Hello World
Hi,
I’m Sao Haruka :)
Japanese programmer
I have started this English blog since Jan 28, 2014.
Thank you.
[Oracle] 直前のSQLを再実行する
OracleのコマンドラインでSQLを実行させるときのメモ
直前のSQLコマンドを実行は / (スラッシュ)
この場合、直前のバッファの内容は表示しません
|
|
直前のバッファの内容を表示して実行するのは run コマンド
|
|
直前のバッファの内容を修正するには edit コマンド
タイプミスなどを修正できます
ただし、環境変数 “_editor” にエディタの設定をしておく必要があります
|
|
(参考)
OracleのSQL*Plusで直前に実行したSQLを再実行
http://margrave.seesaa.net/article/127477048.htmlSQL バッファの編集、エディタで編集する
http://www.shift-the-oracle.com/sqlplus/command/edit.html直前に実行したSQLをエディタで編集する
http://sakusakuit.blog.fc2.com/?m&no=15