2013年10月30日水曜日

Linux上でH2 Databaseが起動しない

概要

Linux上でH2 Databaseが起動しない
理由はホスト名が/etc/hostsに記述されていないためエラーが発生

詳細

実行

/h2-1.3.173.jar org.h2.tools.Server

エラー内容

Exception in thread "main" org.h2.jdbc.JdbcSQLException: 入出力例外: "java.net.UnknownHostException:
 XXXXXXX.local: XXXXXXX.local: 名前またはサービスが不明です"
IO Exception: "java.net.UnknownHostException: XXXXXXX.local: XXXXXXX.local: 名前またはサービスが不明です" [90028-173]
 at org.h2.message.DbException.getJdbcSQLException(DbException.java:331)
 at org.h2.message.DbException.get(DbException.java:160)
 at org.h2.message.DbException.convert(DbException.java:275)
 at org.h2.util.NetUtils.getLocalAddress(NetUtils.java:263)
 at org.h2.server.web.WebServer.updateURL(WebServer.java:328)
 at org.h2.server.web.WebServer.init(WebServer.java:317)
 at org.h2.tools.Server.<init>(Server.java:51)
 at org.h2.tools.Server.createWebServer(Server.java:413)
 at org.h2.tools.Server.runTool(Server.java:306)
 at org.h2.tools.Server.main(Server.java:117)
Caused by: java.net.UnknownHostException: XXXXXXX.local: XXXXXXX.local: 名前またはサービスが不明です
 at java.net.InetAddress.getLocalHost(InetAddress.java:1466)
 at org.h2.util.NetUtils.getLocalAddress(NetUtils.java:261)
 ... 6 more
Caused by: java.net.UnknownHostException: XXXXXXX.local: 名前またはサービスが不明です
 at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
 at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:894)
 at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1286)
 at java.net.InetAddress.getLocalHost(InetAddress.java:1462)
 ... 7 more

解決方法

/etc/hostsに記述することで解決

hostsの確認

$ hostname
XXXXXXX.local
$ cat /etc/hosts
127.0.0.1 localhost

hostsの修正

$ vi /etc/hosts
127.0.0.1  XXXXXXX.local localhost

2013年10月24日木曜日

フォルダ配下のファイル名を作成日時順に連番を付ける

関数


メモ

DateTime型をソートする場合、キャスト(変換)しないといけない
Sort-Object {$_.CreationTime -as [DateTime]} 

2013年10月22日火曜日

配列から重複を削除

概要

HashSetを使用して配列の値を一意にする。
プリミティブ型の場合、そのまま使えないのでオブジェクトにラップして一意にする。

メソッド


2013年10月14日月曜日

2つのCSVファイルから項目に一致した行を出力

概要

2つのCSVファイル(顧客マスタ、商品マスタ)から、顧客マスタに商品マスタ.商品コードが存在するものをPowerShellを使ってCSV出力する

メモ

CSVファイル

■商品マスタ(items.csv)

ITEM_ID,ITEM_NAME
10000,AAAAAA
10001,BBBBBB
10002,CCCCCC
・・・・
・・・・
■顧客マスタ(customers.csv)
CUSTOMER_ID,ITEM_ID,CUSTOMER_NAME,QUANTITY
8000,10000,aaaaa,100
8000,10002,bbbbb,50
8001,10005,ccccc,1000
・・・・
・・・・

SQL文だと以下のような感じ

■SQL

SELECT CUSTOMERS.* FROM CUSTOMERS, ITEMS 
WHERE CUSTOMERS.ITEM_ID = ITEMS.ITEM_ID

PowerShell その1

$result = Import-Csv c:\items.csv | Select-Object ITEM_ID 
Import-Csv c:\customers.csv | Where-Object {$result -match $_.ITEM_ID} | Export-Csv c:\output.csv -NoType
customers.csvが10万件、items.csvが1万件で約数十分ぐらいかかる(※スペックによるがとにかく遅い!!)

PowerShell その2

その1の場合、シンプルだが遅いので
items.csvをHashTableにセット(ITEM_IDに重複がないこと)する方法で解決した(約20秒ぐらいで終わる)

$hash = @{}
Import-Csv c:\items.csv | ForEach-Object {$hash.Add($_.ITEM_ID, $_)}
Import-Csv c:\customers.csv | ForEach-Object {if($hash.Get_Item($_.ITEM_ID)){$_}} | Export-Csv c:\output.csv -NoType

2013年10月6日日曜日

音楽ファイルのタグ情報を取得する

概要

フォルダ配下の音楽ファイルのタグ情報を取得する。

・タグ情報を取得するため「taglib-sharp.dll」を使用する。
以下のサイトより取得後、任意の場所に解凍する。
http://download.banshee.fm/taglib-sharp/2.1.0.0/
ファイル名:taglib-sharp-2.1.0.0-windows.zip

関数


実行例

 Get-MusicTagData -MusicFolderPath "C:\develop\flac\MR.BIG\Big, Bigger, Biggest"

メモ

タグ情報/プロパティ情報をすべて取得(※taglib-sharp.dllから取得できるすべて)

$TagLib = "C:\develop\lib\taglib-sharp.dll"
# ライブラリ読み込み
[System.Reflection.Assembly]::LoadFile($TagLib)
# タグ情報を取得するファイル名を指定
$audiofile = [TagLib.File]::Create("C:\develop\flac\MR.BIG\Big, Bigger, Biggest\01 Addicted to that rush.flac")
# タグ情報を取得
$audiofile.Tag
# プロパティ情報を取得
$audiofile.Properties