Tuesday, April 29, 2008

この記事は

SQL*PLUSもどきを作る その1(PowerShell Tips)
SQL*PLUSもどきを作る その1の説明(PowerShell Tips)
SQL*PLUSもどきを作る その2(PowerShell Tips)
SQL*PLUSもどきを作る その3(PowerShell Tips) 
SQL*PLUSもどきを作る その4(PowerShell Tips)

の続きです。

今回紹介する関数は、コマンドラインから複数行の入力を取得するというものです。

Oracle用というわけではなく普段でも使用可能な関数です。

今回、SQL*PLUSもどきを作るにあたり、SQL文をどう入力させるかを検討しました。

SQL*PLUSでは複数行にわたるSQL文の入力が可能です。 しかしPowerShellでは複数行の入力を読み取るコマンドレットがないので、自作したというわけです。

下記が、複数行の入力を受け取るRead-MultiLine関数です。

#=========================================================================================
# Read-MultiLine: コマンドラインから複数行の入力を受け取る
#
# UPDATE 2008/04/24		Ver.1.0.0 
#
# copyright HIRO's.NET(http://hiros-dot.net/)
#=========================================================================================
function global:Read-MultiLine ( [string]$prompt, [string]$endChar = ";" ){
	if ($args[0] -eq "-?" )
	{
		Write-Host @"
名前:
        Read-MultiLine

概要:
        コマンドラインから複数行文字列を取得します。

構文:
        Read-MultiLine [-prompt] [-endChar]

使用方法:
        -------------------------- 例 1 --------------------------
        `$a = Read-MultiLine
        
        この例はコマンドラインから複数行を取得し行終端が";"の場合に読み取りを中止し結果を返します。
        入力の終了を判定する文字は";"が規定値です。
        
        -------------------------- 例 2 --------------------------
        `$a = Read-MultiLine -prompt "文字列を入力してください"
        
        この例はプロンプトに"文字列を入力してください"と表示した後に入力を受け付けます。
        
        -------------------------- 例 3 --------------------------
        `$a = Read-MultiLine -endChar "#"
        
        この例は入力の終了を判定する文字を"#"とします。
        ユーザー入力の行終端が"#"である場合に、入力を中断し結果を返します
        
"@ -foregroundcolor Cyan
        return
	}
	if ( $prompt.Length -gt 0 ){ Write-Host ($prompt + ":") }
	
	while(1)
	{
		$ip += Read-Host
		if ($ip.SubString($ip.Length-1,1) -eq $endChar){ break; }
		else{$ip += "`n"}
	}
	#Write-Host $ip
	
	
	return $ip.Substring(0, $ip.Length - $endChar.Length)
}

この関数は、実行すると";"が入力されるまで、複数行に渡る文字列の読み取りを行います。

PS > $inp = Read-MultiLine
ABC
DEF
GHI;

下記のようにするとプロンプトを表示した後に入力を受けつけます。

PS > $inp = Read-MultiLine "入力してください"
入力してください:
This
is
Read-MultiLine
Command;

また、下記のようにすると終了判定文字を";"から"#"に変更することができます。

PS > $inp = Read-MultiLine -endChar "#"
ABC
DEF
GHI#
Tuesday, April 29, 2008 12:09:21 AM (Tokyo Standard Time, UTC+09:00)  #    Comments [2]  |  Trackback
Tuesday, April 29, 2008 7:55:57 AM (Tokyo Standard Time, UTC+09:00)
初めまして、入海と申します。PowerShell SQL Server Managementというキーワードで検索していたらこのサイトに遭遇しました。PowerShell面白いですよね。私も会社でいろいろ広めようと「布教活動」をしているところです。

また遊びに来ます。よろしくお願いします。
Tuesday, April 29, 2008 12:16:32 PM (Tokyo Standard Time, UTC+09:00)
入海さんはじめまして。
PowerShellおもしろいですよね。

布教活動がんばってください。
一緒にPowerShellの良さを広めていきましょう!!

また遊びに来てくださいね!!
Comments are closed.

Theme design by Jelle Druyts

Pick a theme: