2010年12月15日水曜日

.NET DataTableから対象行を抽出する

DataTableから対象行を抽出する。

DataTable.Select メソッド (String)

フィルタ基準と一致するすべての DataRow オブジェクトを主キーの順に (主キーがない場合は追加された順に) 配列として取得します。

'宣言

Public Function Select ( _
filterExpression As String _
) As DataRow()
'使用

Dim instance As DataTable
Dim filterExpression As String
Dim returnValue As DataRow()

returnValue = instance.Select(filterExpression)

パラメータ
filterExpression
型 : System.String
行にフィルタをかけるために使用する基準。

戻り値
型 : System.Data.DataRow()
DataRow オブジェクトの配列。

解説
引数 filterExpression を作成するには、フィルタを作成するときに DataColumn クラスの Expression プロパティの値に適用する規則と同じ規則を使用します。


フィルタ式を使用して DataRow オブジェクトの配列を返す例を次に示します。

Private Sub GetRowsByFilter()

Dim table As DataTable = DataSet1.Tables("Orders")

' Presuming the DataTable has a column named Date.
Dim expression As String
expression = "Date > #1/1/00#"
Dim foundRows() As DataRow

' Use the Select method to find all rows matching the filter.
foundRows = table.Select(expression)

Dim i As Integer
' Print column 0 of each returned row.
For i = 0 to foundRows.GetUpperBound(0)
Console.WriteLine(foundRows(i)(0))
Next i
End Sub

詳しくはMSDNライブラリ
DataTable.Select メソッド (String)を参照

2010年11月11日木曜日

.NET 小数部切捨てとか

Math.Floor メソッド

'宣言
Public Shared Function Floor ( _
d As Double _
) As Double
'使用

Dim d As Double
Dim returnValue As Double

returnValue = Math.Floor(d)

パラメータ
d
型 : System.Double
倍精度浮動小数点数。

戻り値
型 : System.Double
d 以下の最大の整数。d が NaN、NegativeInfinity、PositiveInfinity のいずれかに等しい場合はその値が返されます。
解説

このメソッドの動作は IEEE 規格 754、セクション 4 に従います。このような丸めは、負の無限大への丸めと呼ばれることがあります。つまり、d が正の場合は、小数部が切り捨てられます。d が負の場合は、小数部が存在すると次に小さな整数に丸められます。このメソッドの演算は、正の無限大への丸めをサポートしている Ceiling メソッドとは異なります。


Math.Floor(Double) メソッドについて説明し、このメソッドを Ceiling(Double) メソッドと比較する例を次に示します。

Dim values() As Double = {7.03, 7.64, 0.12, -0.12, -7.1, -7.6}
Console.WriteLine(" Value Ceiling Floor")
Console.WriteLine()
For Each value As Double In values
Console.WriteLine("{0,7} {1,16} {2,14}", _
value, Math.Ceiling(value), Math.Floor(value))
Next
' The example displays the following output to the console:
' Value    Ceiling    Floor
'
' 7.03     8      7
' 7.64     8      7
' 0.12     1      0
' -0.12       0       -1
' -7.1     -7       -8
' -7.6     -7      -8

詳しくは、MSDNライブラリ
Math.Floor メソッドを参照

.NET 指定した文字セットでの文字列のバイト数を調べる

Encoding.GetByteCount メソッド (String)
派生クラスでオーバーライドされた場合、指定した String に含まれる文字をエンコードすることによって生成されるバイト数を計算します。

'宣言

Public Overridable Function GetByteCount ( _
s As String _
) As Integer
'使用

Dim instance As Encoding
Dim s As String
Dim returnValue As Integer

returnValue = instance.GetByteCount(s)

パラメータs
型 : System.String
エンコード対象の文字のセットを格納している String。

戻り値
型 : System.Int32
指定した文字をエンコードすることによって生成されるバイト数。

使用例
value = System.Text.Encoding.GetEncoding("shift-jis").GetByteCount(str1)

ここではGetEncodingで文字セットの名前を指定し
その文字セットでstr1をエンコードした時のバイト数をGetByteCountで取得している。

詳しくは、MSDNライブラリ
Encoding.GetByteCount メソッドEncoding.GetEncoding メソッドを参照

.NET 文字列の一部が一致しているか調べる

文字列の一部が一致しているか調べる

String.IndexOfメソッドは、その文字列内に指定した文字列と一致する部分があるかを探し、見つかったら、最初に見つかった位置を0以上の整数で返します。見つからなければ、-1を返します。
String.LastIndexOfメソッドは、最後に見つかる位置を返します。

[VB.NET]

Dim s1 As String = "あいうえおあいうえお"

Console.WriteLine(s1.IndexOf("あい")) '結果は"0"
Console.WriteLine(s1.LastIndexOf("あい")) '結果は"5"
Console.WriteLine(s1.IndexOf("アイ")) '結果は"-1"
Console.WriteLine(s1.IndexOf("")) '結果は"0"
Console.WriteLine(s1.LastIndexOf("")) '結果は"9"


DOBON.NET
2つの文字列が等しいかを調べるページ内から抜粋

2010年11月10日水曜日

.NET 1次元配列を指定したオブジェクトで検索し、その中で最も小さいインデックス番号を返す。

Array.IndexOf ジェネリック メソッド (T[], T)

Array 全体を対象に指定したオブジェクトを検索し、インデックス番号の最も小さい要素のインデックスを返します。

戻り値
array 全体を対象に value を検索し、見つかった場合は、インデックス番号の最も小さい要素の 0 から始まるインデックス番号。それ以外の場合は –1。

例外

例外の種類
ArgumentNullException

条件
array が null 参照 (Visual Basic では Nothing) です。

使用例

Imports System

Public Class Example

Public Shared Sub Main()

Dim dinosaurs() As String = { "Tyrannosaurus", _
"Amargasaurus", _
"Mamenchisaurus", _
"Brachiosaurus", _
"Deinonychus", _
"Tyrannosaurus", _
"Compsognathus" }

Console.WriteLine()
For Each dinosaur As String In dinosaurs
Console.WriteLine(dinosaur)
Next

Console.WriteLine(vbLf & _
"Array.IndexOf(dinosaurs, ""Tyrannosaurus""): {0}", _
Array.IndexOf(dinosaurs, "Tyrannosaurus"))

Console.WriteLine(vbLf & _
"Array.IndexOf(dinosaurs, ""Tyrannosaurus"", 3): {0}", _
Array.IndexOf(dinosaurs, "Tyrannosaurus", 3))

Console.WriteLine(vbLf & _
"Array.IndexOf(dinosaurs, ""Tyrannosaurus"", 2, 2): {0}", _
Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2))

End Sub
End Class

' This code example produces the following output:
'
'Tyrannosaurus
'Amargasaurus
'Mamenchisaurus
'Brachiosaurus
'Deinonychus
'Tyrannosaurus
'Compsognathus
'
'Array.IndexOf(dinosaurs, "Tyrannosaurus"): 0
'
'Array.IndexOf(dinosaurs, "Tyrannosaurus", 3): 5
'
'Array.IndexOf(dinosaurs, "Tyrannosaurus", 2, 2): -1


詳しくは、MSDNライブラリ
Array.IndexOf ジェネリック メソッドを参照

2010年11月4日木曜日

Oracle データベースへの接続・再接続 OS 認証で SYSDBA に接続

データベースへの接続・再接続

CONNECT はデータベースにログイン/ログオンを行なうためのコマンド
短縮形は CONN

OS 認証で SYSDBA に接続する例

SQL> connect / as sysdba
接続されました。
SQL>


詳しくは、
SHIFT the Oracle 内の下記記事参照の事
データベースへの接続・再接続

.NET 文字列が数字に変換できるか調べる

文字列が数字に変換できるか調べる

.TryParseメソッドを使用した方法

Dim str As String = "-12.34"
Dim d As Double

'doubleに変換できるか確かめる
If Double.TryParse(str, _
System.Globalization.NumberStyles.Any, _
System.Globalization.NumberFormatInfo.InvariantInfo, _
d) Then
Console.WriteLine("{0}は数字です。", str)
Else
Console.WriteLine("{0}は数字ではありません。", str)
End If

.NET Framework 2.0以降では、Double以外の多くの型でTryParseメソッドを使用できるようになりました。


DOBON.NET
文字列が数字に変換できるか調べるから抜粋

.NET パスから情報を取得する

パスからファイル名、拡張子、ディレクトリ名、ルートディレクトリ名等の情報を取得する

[VB.NET]
'ディレクトリ名の取得
Console.WriteLine( _
System.IO.Path.GetDirectoryName( _
"C:\My Documents\My Pictures\サンプル.jpg"))
'結果: C:\My Documents\My Pictures

'拡張子の取得
Console.WriteLine( _
System.IO.Path.GetExtension( _
"C:\My Documents\My Pictures\サンプル.jpg"))
'結果: .jpg

'ファイル名の取得
Console.WriteLine( _
System.IO.Path.GetFileName( _
"C:\My Documents\My Pictures\サンプル.jpg"))
'結果: サンプル.jpg

'ファイル名(拡張子なし)の取得
Console.WriteLine _
(System.IO.Path.GetFileNameWithoutExtension( _
"C:\My Documents\My Pictures\サンプル.jpg"))
'結果: サンプル

'ルートディレクトリ名の取得
Console.WriteLine( _
System.IO.Path.GetPathRoot( _
"C:\My Documents\My Pictures\サンプル.jpg"))
'結果: C:\


DOBON.NET
パスからファイル名、拡張子、ディレクトリ名、ルートディレクトリ名等の情報を取得するから抜粋

2010年11月2日火曜日

便利なCSV Editor「Cassava Editor」

ExcelでCSVを読込むと、電話番号などの
頭に0が付く数値の文字列は頭の0が消されてしまう
(例
045 → 45

Cassava Editorではそのような事は起こらないできちんと読込んで処理してくれる。
ありがたいエディターである。

詳しくは
あすかぜ・ねっと
Cassava Editorを参照の事
 

OracleVersionの確認方法

OracleVersionの確認方法

SQL> select * from v$version;

上記を実行すれば、Version情報の取得が行われる。

Oracle DBの文字列のサイズ単位の確認と指定方法

確認方法
NLS_* パラメータの現在の値を調べる
V$NLS_PARAMETERS ビューに格納されている。

SQL> select * from v$nls_parameters;
 上記を実行し下記の内容で判断
NLS_LENGTH_SEMANTICS BYTE
ならばByte単位の指定
 
変更方法
NLS_LENGTH_SEMANTICS
NLS_LENGTH_SEMANTICS を 'CHAR' にすると文字列の指定は CHAR 単位になる。BYTE 単位にしたい場合には明示的に指定しなければならない。

SQL> ALTER SESSION SET NLS_LENGTH_SEMANTICS='CHAR';

上記実行で変更される。

BYTE単位の明示的な指定例
SQL> CREATE TABLE CHARBASE_TABLE(
2 NAME1 VARCHAR2(5),
3 NAME2 VARCHAR2(5 BYTE)
4 );
 3行目でBYTE単位の明示的な指定


詳しくは、
SHIFT the Oracle 内の下記記事参照の事
NLS 関連初期化パラメータ(NLS 環境変数)

OracleDB10gExpressEditionのキャラセットをJA16SJISTILDEにする方法

フィールド名等に日本語を使用出来るようにする為、OracleDB10gExpressEditonのキャラセットを、
ユニコード等から変更する方法
Oracle Database 10g Express Edition ( XE )のキャラセットを JA16SJISTILDEにする方法

上記を参考にすれば他の文字コードにも変更可能

この作業を行うと、インストールされて使えていたブラウザからのDBアクセスが使用不可になる。
その回避方法は不明。

2010年10月28日木曜日

.NET パス名の結合

パス名を結合する

ディレクトリ名にファイル名を結合させてパスを取得したいというケースはよくあります。例えば、「C:\Dir」というディレクトリにある「File.txt」というファイルのパスを取得したい場合などです。このような場合、文字列を単純に結合するよりも、Path.Combineメソッドを使ったほうが簡単で、確実です。

[VB.NET]
'フォルダのパス(末尾の"\"の有無を問わない)
Dim dirPath As String = "C:\My Documents\My Pictures"
'ファイル名
Dim fileName As String = "friend.jpg"

'フォルダのパスとファイル名を結合したパスを取得する
Dim path As String =System.IO.Path.Combine(dirPath, fileName)
'C:\My Documents\My Pictures\friend.jpg



DOBON.NET
パスからファイル名、拡張子、ディレクトリ名、ルートディレクトリ名等の情報を取得するから抜粋