2012年5月21日月曜日

SQLServerのテーブルをcsvに出力する


ここを参考にSQL Serverのテーブルをcsvに出力してみる
bcp DB名.dbo.テーブル名 out "c:\log.txt" -c -t, -r\n -S サーバ名 -U ユーザ名 -P パスワード
-tで区切り文字
-rで改行文字

SQL BETWEENの範囲

BETWEENで取得できる範囲で迷ったのでメモ

下記の場合だとymd >=  '2012/05/21' AND ymd <= '2222/02/22'となる。

WHERE ymd BETWEEN '2012/05/21' AND '2222/02/22'

 '2012/05/21'以上、'2222/02/22'以下ですにゃ。

windowsのwindowをキーボード操作で移動する

移動したいウィンドウをアクティブにした状態でAlt+Space、
ツールメニューが開いたら移動を選ぶ、
後はカーソルキーで好きな位置に移動する。

移動中にマウスを操作でも移動できる。

2012年5月17日木曜日

VBでHashTableが入ったArrayListをSortする

結構探し回ったんだけど全然わかんなかったが最終的にここを参考に作業を進めた。
以下のような頭の悪いサンプルデータをComparerを使ってソートしたい。
Dim itemList As new ArrayList 
Dim item1 As new HashTable
item1.add("key1", 10)
item1.add("key2", 20)
item1.add("key3", 30)
Dim item2 As new HashTable
item2.add("key1", 20)
item2.add("key2", 20)
item2.add("key3", 20)
Dim item3 As new HashTable
item3.add("key1", 30)
item3.add("key2", 20)
item3.add("key3", 90)
Dim item4 As new HashTable
item4.add("key1", 110)
item4.add("key2", 220)
item4.add("key3", 330) 
itemList.add(item1)
itemList.add(item2)
itemList.add(item3)
itemList.add(item4)

Comparerでソートするのはjavaで(compareterか?)使ったことがあったので知っていたが、VBではどうやって型を指定するのかさっぱりで結構つまった。
    Public Class ItemSort
        Implements System.Collections.Generic.IComparer(Of Hashtable)
        Public Function Compare(ByVal candidate1 As System.Collections.Hashtable, ByVal candidate2 As System.Collections.Hashtable) As Integer Implements System.Collections.Generic.IComparer(Of System.Collections.Hashtable).Compare

            Dim resultKey1 As Integer = candidate1("key1") - candidate2("key1") '昇順
            'key1が同じときはkey2の降順で返す
            If resultKey1 = 0 Then
                Dim resultKey2 As Integer = candidate2("key2") - candidate1("key2")  '降順
                If resultKey2 = 0 Then
                    'key2が同じときはkey3の昇順で返す
                    Return Comparer.Default.Compare(candidate1("key3"), candidate2("key3")) '昇順
                Else
                    Return resultKey2
                End If
            End If
            'それ以外のときは区分の昇順で返す
            Return resultKey1
        End Function
    End Class
上記のように書いて以下のようにして以下のように呼び出す。
itemList.Sort(New ItemSort)
これでHashTableのfieldでソートかけれる。
超便利^^

2012年5月16日水曜日

awk変数を扱う

ここを参考にawkの変数を扱ってみます。

awkでは宣言を行うことなく変数を使用できます。
例えばこんな感じ
BEGIN{
        x
        x = 2
        print x
}
上のコードではBEGINの直後のxで既に定義されています。
書いた時点でxには0と""(空文字)が代入されています。
0と""とは何なのか?

awkの変数は文字列と数値の両方の値を持っています。
BEGIN{
    x = 2
    y = 3
    w = x y
    v = x + y
    print w
    print v
}
上記のコードではwには"23"が、vには5が入っています。
xは数値の2と文字列の"2"を、
yは数値の3と文字列の"3"を値として持っているのです。
x yのように変数の間に何もない場合は文字列の連結として扱い、
x + yのように間に演算子がある場合は数値の計算として扱うようです。

では
a = "test"
にはどんな値が入っているのか?
"test"は数値としては扱えないため、
aには数値の0と文字列の"test"が入っています。

おもしろい。

awkのスクリプトファイルを実行する

ここを参考にスクリプトファイルからawkを実行してみた。

データファイルの準備
address_data.txt

おぶち,小渕,恵三,100-0014,東京都千代田区永田町4丁目1番地,03(3456)7890,日本政府
はしもと,橋本,龍太郎,100-0014,東京都千代田区永田町2丁1番地,03(3456)1234,日本政府
みやざわ,宮沢,喜一,100-0014,東京都千代田区永田町1丁目2番地,03(3456)6789,日本政府
むらやま,村山,富市,100-0014,東京都千代田区永田町3丁目1番地,03(3456)8901,日本政府
もり,森,喜朗,100-0014,東京都千代田区永田町1丁目1番地,03(3456)7890,日本政府

スクリプトファイルの準備

practice.awk
BEGIN{
                FS = ","
}
{
                print "〒" $4               #郵便番号を出力
                print $5                      #住所
                print $2 " " $3 "様"    #氏名
                print ""                        #空白行を出力
}

実行
gawk -f practice.awk "address_data.txt"

BEGIN{}ないは実行前の設定等を記述する。
コンストラクタ見たいなものか?
FS = ","
でフィールドの区切り文字を半角空白orTabからカンマに変更。
その下の{}内に処理内容を記述、#でコメント。

実行するときは
gawk -f スクリプトファイル "処理するデータファイル"
でおk

2012年5月14日月曜日

ubuntuでファイルの移動と名前の変更

以下のコマンドを実行

mv ファイル名 移動先のpath
mv ファイル名 変更後のファイル名

例:Productディレクトリに移動
mv test.txt ./Product/

例:todo.txtに変更
mv test.txt todo.txt

ubuntuでawk

ここを参考にawkを使ってみる
まずawkのインストールする。
今回使ったのはgawk
sudo apt-get install gawk
処理するためのテキストファイルを作る。
data.txt

東京は日本の首都です
日本の首都は東京
明日は東京に出張します
以下のコマンドを実行する

gawk '/東京/{print}' data.txt
出力結果

東京は日本の首都です
日本の首都は東京
明日は東京に出張します
print文は東京が含まれる行を抽出してくれるっぽい 。
楽しげなのでどんどん使っていきたい。


2012年5月13日日曜日

googleドキュメントのスプレッドシートでプルダウンリストを作成する

家計簿を作成していて気になったので調べた。

プルダウンリストを設置したいセルを選択し、右クリックメニューのデータの検証。
条件をリストのアイテムに設定し、範囲を選ぶか、入力して項目を決める。
リストの値だけを入力させるようにするには、無効なデータも入力を許可するチェックボックスをオフにする。
以上ですた。
頑張って家計簿付けますw
google docs

2012年5月10日木曜日

windowsのbeep音を黙らせる

vb.netやSQL Serverを使っているとbeep音がうるさくてsan値が危ういので黙らせる方法



上記を参考に

デバイスマネージャ>ツールバーの表示>非表示のデバイスの表示>プラグアンドプレイではないドライバー>Beepのプロパティ>ドライバータブ

ここから停止や無効に設定すれば静かなものである。

2012年5月9日水曜日

近況

先日電子レンジを買ったわけですが、そのときの失敗。

amazonでこの方を注文しました。
Haier単機能電子レンジJM-17C-50 ホワイト【東日本用50Hz地域専用】

でも僕が住んでるのって西日本なんですよ。









僕が住んでるのって西日本なんですよ。

気づいたときには既に発送されていてキャンセルできず、急いで返品手続きを行い、さらに西日本用を注文しました。

届けてくれた佐川の人が「2つ頼まれてますけど間違いですよねwじゃあ返送しときますね~」って感じでさらっと持ってってくれて事なきを得ました。

あ、これ会社で話したらおもしろいかなw

VBでオブジェクトのデータ型を確認する

VB.net 2005でSQL serverとやりとりしてて空の値(null)が返されたんだけど、vb的にはnullではなくSystem.DBNull型なのだそうです。

if Not (TypeOf source("CometGarradd").rows(0)("IonTail") Is System.DBNull) Then
End If

上記のようにすると条件として使えました。

TypeOf 変数名 Is データ型

とすると変数の方を確認できた。

ギャラッドさんにイオンテイルがあるかどうかは知りませんw

TRUNCATEとRTRIM

文字数が違うchar型フィールドを比較するときにつまったのでメモ
DBはSQL Serverです

SELECT
   darlin
FROM
    DB1,DB2
WHERE
    DB1.name = RTRIM(DB2.name)

DB1.nameがchar(5)、DB2.nameがchar(10)であるときDB2.nameの右側から5文字分の空白をトリミングしてくれます。
ちなみに左からトリミングしたい場合はLTRIM、左右の空白を削る場合はTRIMでよいそうです。


ついでにこれを覚えた。
TRUNCATE TABLE DBNAMEテーブルの中身を確認せずに削除するのでDELETEより早いらしいです。

2012年5月7日月曜日

近況

GWの最初のほう、初めて休日出勤した。みんな私服で僕だけスーツだったので浮いてた。
いつも浮いてるから変わらないな。
初給料で洗濯機と電子レンジ買ったらお金なくなったw
先一昨日隠れ家さくらに最後の給料もらいに行ってきた。1年バイトしたけど初めて店で呑んだ。
次の日nabeyarouzeで鍋やった。なんかれんこんディスられて、ステーキもらった。
カーテンまだ買ってないのでmacbook airはもう少し先になるかも。
早く手に入れたい。mac使わないデメリットのほうが大きい気がしてきた。

今月の勉強会の申し込み始まってる。行くと思う。

2012年5月2日水曜日

DateTime型への変換とDBでの比較

vb2005からSQLserver使っててDateTimeの比較で詰まったのでメモ



まずはDateTime型にするところから。

vb2005で日時の文字列をDataTime型に変換するときは以下のように行う。
Dim dt As DateTimedt = DateTime.ParseExact("2012/05/02 19:04:30", "yyyy/MM/dd HH/mm/ss", Nothing)    'DateTime.ParseExact(変換したい日時, フォーマット, フォーマットと日時の対応表?)
この時、文字列の書式とフォーマットの書式が一致していないと怒られる。

SQLで比較するときはすでにDateTime型なので

Dim query As String = ""query = query  + " SELECT COUNT(*) " + vbCrLfquery = query  + " FROM ZIEX  " + vbCrLf query = query  + " WHERE YMDT >= " + dt + " " + vbCrLf


などとする。
dtがString型のままの場合は以下のようにシングルクォーテーションで囲まなければならない。


Dim query As String = ""query = query  + " SELECT COUNT(*) " + vbCrLfquery = query  + " FROM  EAGLE " + vbCrLf query = query  + " WHERE YMDT >= '" + dt + "' " + vbCrLf