メニュー

関連ページリンク

トップ > PHP > PHP - 人気ブログ(Blog)検索結果詳細 (2008年12月1日 11時)

文字コードを指定したファイルの書き込み&読み込み(Java)

文字コードを指定したファイルの書き込み&読み込み(Java)


デフォルトの改行コードを取得
private String NL = System.getProperty("line.separator");

■書き出し
/**
* データ書き出し
* @param file 書き込み対象ファイル
* @param doc 書き込むドキュメント
* @param code 文字コード(Shift_JIS など)
*/
private void write(String file, Document doc, String code) {
String[] lines;
Pattern ptn = Pattern.compile("(\r\n|\r|\n)+");
try {
BufferedWriter br = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), code));
lines = ptn.split(doc.getText(0, doc.getLength()));
for(int i = 0; i < lines.length; i++) {
br.write(lines[i] + NL);
}
br.close();
} catch (IOException ex) {
//エラー処理
} catch (BadLocationException ex) {
//エラー処理
}
}

■読み込み
/**
* データ読み込み
* @param file 読み込み対象のファイル
* @param code 読み込む文字コード
* @return 読み込んだ文字列
*/
private String read(String file, String code) {
StringBuffer data = new StringBuffer();
String line;
try {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), code));
while((line = br.readLine()) != null) {
data.append(line + NL);
}
br.close();
} catch (IOException ex) {
//エラー処理
}
return new String(data);
}

■サポートされているエンコーディング

作者:うっきー

更新日:2008年11月28日 12時19分

このブログのホーム

PostgreSQL8をRPMでインストール(データベース・DB)

PostgreSQL8をRPMでインストール(データベース・DB)


開発用の環境をつくるならRPMで。

■インストール
# yum install postgresql postgresql-server

■DBの初期化
必ずpostgresユーザで初期化
# su - postgres
$ initdb --encoding=文字コード --pgdata=/var/lib/pgsql/data --no-locale
※文字コードを指定しないとSQL_ASCIIになる
※--no-localeを指定しないと日本語の文字列の並び替えなどが正しくできないことがある

■最大接続数と共有メモリの設定
/var/lib/pgsql/data/postgresql.conf を編集。デフォルトは以下のとおり。
max_connections = 100		※接続数
shared_buffers = 1000 ※共有メモリ

■ネットワーク設定
/var/lib/pgsql/data/postgresql.conf を編集。
listen_addresses = '*'
/usr/local/pgsql/data/pg_hba.confを編集。既存の「trust」を「md5」に変更。
※「trust」は認証なし。「md5」は暗号化したパスワードで認証。
外部の特定アドレスからのアクセスを許可する場合は以下の様に追記。
TYPE	DATABASE		USER		CIDR-ADDRESS			METHOD
host all all 123.45.67.890/32 md5

■起動・終了
必ずrootで起動
# /etc/init.d/postgresql start	※起動
# /etc/init.d/postgresql stop ※終了

■ブート時に自動起動させる
# chkconfig --add postgresql

作者:うっきー

更新日:2008年11月15日 5時59分

このブログのホーム

CentOS5/VMware tools に必要なパッケージ(LINUX デスクトップ)

CentOS5/VMware tools に必要なパッケージ(LINUX デスクトップ)


VMware ServerでVMware toolsの設定(vmware-config-tools.pl )中、とエラーが起きる。
以下のパッケージをインストールしてからもう一度設定するとうまくいった。

■インストール
# yum install gcc
# yum install kernell-devel kernel-souce kernel-headers
# yum install inetd

※VMware Serverのバージョンは1.0.6 build-91891

作者:うっきー

更新日:2008年11月12日 19時37分

このブログのホーム

CentOS5でデスクトップマネージャを切り替える(LINUX デスクトップ)

CentOS5でデスクトップマネージャを切り替える(LINUX デスクトップ)


不要なソフトを消したら、デスクトップマネージャが変わってしまった・・・というトラブルが頻発。
switchdeskというコマンドで簡単に切り替えられる。

■インストール
# yum install switchdesk

■環境をインストール
[ KDEの場合 ]
# yum groupinstall “KDE Software Development”
[ GNOMEの場合 ]
# yum groupinstall "GNOME Desktop Environment"
※他のデスクトップマネージャとしてXFCE、FVWMなどがある

■切り替え実行
# switchdesk GNOME

再起動すると切り替わります。

作者:うっきー

更新日:2008年11月12日 13時8分

このブログのホーム

カーソルのSELECT文でUNIONしているとネストした表を参照できない(PL/SQL)

カーソルのSELECT文でUNIONしているとネストした表を参照できない(PL/SQL)


※Oracleのバージョンは 10.1.0.2 です。

■問題サンプル
下記の赤字の箇所でエラー。
UNIONではなく、単独のSELECT文の場合は問題なし。
CURSOR sample (
・・・
引数 ネストした表のタイプ
・・・
)
IS
SELECT ・・・
WHERE
param IN ( SELECT * FROM TABLE ( 引数 ) )
・・・
UNION ALL
SELECT ・・・
WHERE
param IN ( SELECT * FROM TABLE ( 引数 ) )
・・・

■エラーと対策
【エラーコード】
Oracle Error :: ORA-22905
cannot access rows from a non-nested table item

【原因】
attempt to access rows of an item whose type is not known at parse time or that is not of a nested table type
ネストしていないテーブル型、もしくは解析時に不明な型の部品の行にアクセスしようとした

【解決】
use CAST to cast the item to a nested table type
CAST関数でネストした表に型変換してください

■解決サンプル
CURSOR sample (
・・・
引数 ネストした表のタイプ
・・・
)
IS
SELECT ・・・
WHERE
param IN ( SELECT * FROM TABLE ( CAST( 引数 AS ネストした表のタイプ ) ) )
・・・
UNION ALL
SELECT ・・・
WHERE
param IN ( SELECT * FROM TABLE ( CAST( 引数 AS ネストした表のタイプ ) ) )
・・・

う~ん。ネストした表の参照の仕方に問題があるのかな?

作者:うっきー

更新日:2008年11月10日 20時30分

このブログのホーム

配列のメソッド(PL/SQL)

配列のメソッド(PL/SQL)


■タイプ宣言
-- ネストした表
create type タイプ1 as table of データ型(データサイズ);
-- 可変長配列
create type タイプ2 as varray(配列の要素数) of データ型(データサイズ);
※ネストした表は添え字を動的に設定できる。可変長配列は上限を設定する。
※ネストした表は添え字を連続にしなくて良い。可変長配列は連続していないとダメ。


■メソッド
配列名.exists(添字)			添字が存在すれば TRUE
配列名.count 要素数
配列名.limit 最大要素数 (table は、NULL が返る)
配列名.first 最小添字
配列名.last 最大添字
配列名.prior(n 要素) n 要素前の添字
配列名.next(n 要素) n 要素次の添字
配列名.extend(n 要素) n 要素追加 (table のみ)
配列名.extend(n 要素, 添字) 添字の要素を n 要素コピー (table のみ)
配列名.extend 空要素を末尾に追加
配列名.trim(n 要素) 最後から n 要素削除 (table のみ)
配列名.delete(添字) 添字の要素を削除 (table のみ)

■値の設定
配列名(添え字) := 値;

■配列の初期化
配列名 := タイプ();

作者:うっきー

更新日:2008年11月10日 16時49分

このブログのホーム

ネットワークの確認/ipconfig(MS-DOS)

ネットワークの確認/ipconfig(MS-DOS)


■書式
ipconfig[
/all |
/release [ネットワークアダプタ名] |
/renew [ ネットワークアダプタ名] |
/flushdns |
/registerdns |
/displaydns |
/showclassid ネットワークアダプタ名 |
/setclassid ネットワークアダプタ名 [ クラスID]
]

■オプション
オプションなし
ネットワーク設定の簡易表示を行う
/all
ネットワーク設定の詳細表示を行う
/release [ネットワークアダプタ名]
指定したネットワークアダプタにおけるDHCPサーバからのIPアドレスのリースを解放(リリース)する。
アダプタ名を省略した場合には、すべてのアダプタが対象になる
/renew [ネットワークアダプタ名]
指定したのネットワークアダプタにおけるDHCPサーバからのIPアドレスのリースを更新する。
アダプタ名を省略した場合には、すべてのアダプタが対象になる
/flushdns
DNSリゾルバの未使用キャッシュを削除する
/registerdns
DHCPサーバからのIPアドレスのリースを更新するとともに、ダイナミックDNSへレコードを登録する
/displaydns
DNSリゾルバのキャッシュを表示する
/showclassid ネットワークアダプタ名
DHCPサーバから通知された利用可能なクラスIDを表示する
/setclassid ネットワークアダプタ名 [ クラスID]
新しいクラスIDをアダプタに設定する

作者:うっきー

更新日:2008年11月7日 9時38分

このブログのホーム

別パッケージの定数が読み込めない(PL/SQL)

別パッケージのパブリック定数が読み込めない(PL/SQL)


■現象
関数と定数を定義しているパッケージから定数を読み出そうとすると、
初回実行時に下記のエラーが出る。2回目以降は出ない
ORA-06502: PL/SQL: numeric or value error: character string buffer too small

■原因
該当パッケージがロードできていない。
Oracleのバージョン10.1.0.4以前の不具合。

■対策
・Oracleのバージョンを上げる

※この現象が起きる条件は不明です。私の場合は上記の条件で起こりました。

作者:うっきー

更新日:2008年10月30日 10時43分

このブログのホーム

ページ内に一定数の明細行を出力する(ActiveReports 3.0J)

ページ内に一定数の明細行を出力する(ActiveReports 3.0J)


明細を一定行数出力し、改ページ。
一定数に満たない場合は空白行を出力して、出力行数を合わせています。
【注意】 この処理では空白行の挿入が必ず最終ページで行われます!

■コントロールの配置
PageBreak を 明細の下に設置。以下名称をPageBreak1とする
明細セクション
XXXXX NNNNN ...
※↑この下線みたいに設置。

■プロパティの設定
【PageBreak1】
Enabled ・・・ False
Visible ・・・ False

■スクリプト
『rpt.Sections("Detail")』 は明細のセクション。28行毎に改ページしてます。
ページの不足行は空白行で補います。
赤い文字の部分のみ設定してください。
'=================================================================
'
' 明細の一定行数出力処理 ver0.9.3
' 作成 2008/10/23 UKI
' 修正 2008/10/24 UKI 空白行が無限に挿入される問題を修正
' 空白行に最終行のデータが入る問題を修正
'
'-----------------------------------------------------------------
'■設定
'1ページの最大出力行数

Const MAX_ROW_COUNT As Integer = 28
'明細セクションのテキストボックス名全て
Dim Fields As String() = { "TextBox1","TextBox3","TextBox4","TextBox5","TextBox6","TextBox7","TextBox8","TextBox9","TextBox29","TextBox30"}
'=================================================================


'汎用
Dim i As Integer
'行数のカウント
Dim Count As Integer = 0 'データカウント
Dim Count2 As Integer = 0 '出力行数カウント
'EOF発生の行番号
Dim LastLine As Integer = 0


Function ActiveReport_FetchData(ByVal EOF As Boolean) As Boolean
'ページブレークを無効
Ctype(rpt.Sections("Detail").Controls("PageBreak1"),PageBreak).Enabled = false

'終了判定
If EOF Then
If Count = 0 Or Count >= MAX_ROW_COUNT Then
Count2 = 0 '出力行カウントリセット
LastLine = 0 'EOF発生行番号リセット
Return True 'Fetchを終了
Else If LastLine <= 0 Then
LastLine = Count 'EOF発生行番号セット
End If
End If

'行数カウント
Count += 1

'ページブレーク有効
If Count >= MAX_ROW_COUNT Then
Ctype(rpt.Sections("Detail").Controls("PageBreak1"),PageBreak).Enabled = true
Count = 0
End If

End Function

Sub Detail_Format
Count2 += 1
If Count2 > LastLine And LastLine > 0 Then
'空白行の設定
For i = 0 To Fields.Length - 1
Ctype(rpt.Sections("Detail").Controls(Fields(i)),TextBox).Text = ""
Next i
End If
End Sub

■注意
最後に空白ページが入るっていう場合はページフッターの高さを調整してみてください。
行数を固定している為、明細のセクションの高さが一定になります。
その結果、帳票の縦幅が固定される為、空白ページが入る場合があります。


グループ単位の合計行を全ページに表示させたい場合とかに重宝します。

作者:うっきー

更新日:2008年10月24日 16時35分

このブログのホーム

入力引数に配列を渡して、検索条件 IN に使う(PL/SQL)

入力引数に配列を渡して、検索条件 IN に使う(PL/SQL)


①準備/TYPEを作成
※ローカルのタイプ型では後々エラーが出ます。
CREATE OR REPLACE TYPE NUM_ARY IS TABLE OF NUMBER;
※以前上記をコメントアウトしてましたが、その修正が間違いでした・・・。

②引数の設定
CREATE OR REPLACE FUNCTION SAMPLE (
・・・
IN_NUM_ARY 配列を受け取るパッケージ.NUM_ARY,
・・・
)
RETURN ・・・

③処理部で検索条件 IN に使用
SELECT * FROM SAMPLE_TABLE
WHERE
ID IN ( SELECT * FROM TABLE(IN_NUM_ARY) )
・・・

作者:うっきー

更新日:2008年10月23日 11時1分

このブログのホーム