ConvertFrom-String
文字列コンテンツから構造化プロパティを抽出および解析します。
構文
ConvertFrom-String
[-Delimiter <String>]
[-PropertyNames <String[]>]
[-InputObject] <String>
[<CommonParameters>]
ConvertFrom-String
[-TemplateFile <String[]>]
[-TemplateContent <String[]>]
[-IncludeExtent]
[-UpdateTemplate]
[-InputObject] <String>
[<CommonParameters>]
説明
ConvertFrom-String コマンドレットは、文字列コンテンツから構造化プロパティを抽出して解析します。 このコマンドレットは、従来のテキスト ストリームからテキストを解析することによってオブジェクトを生成します。 パイプライン内の各文字列について、コマンドレットは区切り記号または解析式によって入力を分割し、結果の分割要素ごとにプロパティ名を割り当てます。 これらのプロパティ名を指定できます。そうでない場合は、自動的に生成されます。
コマンドレットの既定のパラメーター セット ByDelimiter は、正規表現の区切り記号で正確に分割されます。 Import-Csv コマンドレットのように、引用符の一致や区切り記号のエスケープは実行されません。
コマンドレットの代替パラメーター セット TemplateParsing は、正規表現によってキャプチャされるグループから要素を生成します。
このコマンドレットは、基本的な区切り解析と、自動生成された例駆動型解析の 2 つのモードをサポートしています。
区切り記号による解析では、既定で、入力を空白の位置で分割し、生成されるグループにプロパティ名を割り当てます。 ConvertFrom-String の結果を Format-* コマンドレットのいずれかにパイプして区切り記号をカスタマイズすることも、Delimiter パラメーターを使用することもできます。
また、このコマンドレットでは、 Microsoft Research による FlashExtract の研究作業に基づく、自動生成されたサンプル駆動型解析もサポートされています。
例
例 1: 既定のプロパティ名を持つオブジェクトを生成する
PS C:\> "Hello World" | ConvertFrom-String
P1 P2
-- --
Hello World
PS C:\>
このコマンドは、既定のプロパティ名 P1 と P2 を持つ オブジェクトを生成します。 結果は P1="Hello" および P2="World" です。
例 1A: 生成されたオブジェクトを把握する
PS C:\> "Hello World" | ConvertFrom-String | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
P1 NoteProperty string P1=Hello
P2 NoteProperty string P2=World
PS C:\>
コマンドは、プロパティ P1、P2 を持つ 1 つのオブジェクトを生成します。既定では、両方のプロパティは 'string' 型です。
例 2: 区切り記号を使用して、既定のプロパティ名を持つオブジェクトを生成する
PS C:\> "Hello World" | ConvertFrom-String -Delimiter "ll"
P1 P2
-- --
He o World
PS C:\>
このコマンドは、区切り記号として Hello の 'll' を指定することで、P1="He" プロパティと P2="o World" プロパティを持つオブジェクトを生成します。
例 3: 2 つの名前付きプロパティを含むオブジェクトを生成する
PS C:\> "Hello World" | ConvertFrom-String -PropertyNames FirstWord, SecondWord
FirstWord SecondWord
--------- ----------
Hello World
PS C:\>
このコマンドは、次の 2 つのプロパティを含むオブジェクトを生成します。
- FirstWord、値 "Hello"
- SecondWord、値 "World"
例 4: TemplateContent パラメーターの値として式を使用し、結果を変数に保存します。
$template = @'
{Name*:Phoebe Cat}, {phone:425-123-6789}, {age:6}
{Name*:Lucky Shot}, {phone:(206) 987-4321}, {age:12}
'@
$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111) 222-3333, 1
'@
$testText |
ConvertFrom-String -TemplateContent $template -OutVariable PersonalData |
Out-Null
Write-output ("Pet items found: " + ($PersonalData.Count))
$PersonalData
Pet items found: 4
Name phone age
---- ----- ---
Phoebe Cat 425-123-6789 6
Lucky Shot (206) 987-4321 12
Elephant Wise 425-888-7766 87
Wild Shrimp (111) 222-3333 1
C:\ >
このコマンドでは、 TemplateContent パラメーターの値として式を使用します。 式は、わかりやすくするために変数に保存されます。 Windows PowerShellは、パイプラインで ConvertFrom-String に使用される文字列に次の 3 つのプロパティがあることを理解しています。
- 名前
- 電話
- age
入力の各行は、サンプルの一致によって評価されます。行がパターンで指定された例と一致する場合は、値が抽出され、定義された出力変数に渡されます。
サンプル データ $templateでは、次の 2 つの異なる電話形式が提供されます。
- 425-123-6789
- (206) 987-4321
また、次の 2 つの異なる年齢形式があります。
- 6
- 12
これは 、(206) 987 4321 のような電話が認識されないことを意味します。これは、そのパターンに一致するサンプル データがないためです (3 桁のシーケンスと 4 桁のシーケンスの間にハイフンはありません)。 3以上の数字の年齢と同様に、それらは認識されません。
例 5: 生成されたプロパティにデータ型を指定する
$template = @'
{[string]Name*:Phoebe Cat}, {[string]phone:425-123-6789}, {[int]age:6}
{[string]Name*:Lucky Shot}, {[string]phone:(206) 987-4321}, {[int]age:12}
'@
$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111) 222-3333, 1
'@
$testText |
ConvertFrom-String -TemplateContent $template -OutVariable PersonalData | Out-Null
Write-output ("Pet items found: " + ($PersonalData.Count))
$PersonalData
Pet items found: 4
Name phone age
---- ----- ---
Phoebe Cat 425-123-6789 6
Lucky Shot (206) 987-4321 12
Elephant Wise 425-888-7766 87
Wild Shrimp (111) 222-3333 1
C:\ >
これは、上記の No. 4 と同じ例です。唯一の違いは、各必要なプロパティのデータ型を含むパターン文字列です。 両方の例の年齢列の配置の違いに注目してください。
例 5A: 生成されたオブジェクトを把握する
$template = @'
{[string]Name*:Phoebe Cat}, {[string]phone:425-123-6789}, {[int]age:6}
{[string]Name*:Lucky Shot}, {[string]phone:(206) 987-4321}, {[int]age:12}
'@
$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111) 222-3333, 1
'@
$testText |
ConvertFrom-String -TemplateContent $template -OutVariable PersonalData |
Out-Null
$PersonalData | Get-Member
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
age NoteProperty int age=6
Name NoteProperty string Name=Phoebe Cat
phone NoteProperty string phone=425-123-6789
C:\ >
Get-Member は、age が整数型であることを示しています。
パラメーター
-Delimiter
要素間の境界を識別する正規表現を指定します。 分割によって作成された要素は、結果のオブジェクトのプロパティになります。 区切り記号は、最終的には System.Text.RegularExpressions.RegularExpression.Split() の呼び出しで使用されます。
Type: | String |
Aliases: | DEL |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-IncludeExtent
このコマンドレットに、既定で削除されるエクステント テキスト プロパティが含まれていることを示します。
Type: | SwitchParameter |
Aliases: | IE |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
パイプラインから受信した文字列、または文字列オブジェクトを含む変数を指定します。
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-PropertyNames
結果のオブジェクトに分割値を割り当てるプロパティ名の配列を指定します。 分割または解析するすべてのテキスト行は、プロパティ値を表す要素を生成します。 要素がキャプチャ グループの結果であり、そのキャプチャ グループの名前が ( や (?'name')
など) の場合、(?<name>)
そのキャプチャ グループの名前が プロパティに割り当てられます。
PropertyName 配列に要素を指定した場合、それらの名前は、まだ名前が付いていないプロパティに割り当てられます。
フィールドよりも多くのプロパティ名を指定した場合、Windows PowerShellは余分なプロパティ名を無視します。 すべてのフィールドに名前を付けるのに十分なプロパティ名を指定しない場合、Windows PowerShellは、名前が付かないプロパティ (P1、P2 など) に数値プロパティ名を自動的に割り当てます。
Type: | String[] |
Aliases: | PN |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TemplateContent
このコマンドレットが文字列を割り当てるプロパティを記述する式または変数として保存された式を指定します。 テンプレート フィールド指定の構文は、{[optional-typecast]name(sequence-spec, example):example-value} です。 例として{PersonInfo*:{Name:Patti Fuller} があります。
Type: | String[] |
Aliases: | TC |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-TemplateFile
文字列の目的の解析用のテンプレートを含むファイルを配列として指定します。 テンプレート ファイルでは、次の例に示すように、プロパティとその値は角かっこで囲まれています。 Name プロパティとそれに関連付けられている他のプロパティなどのプロパティが複数回表示される場合は、アスタリスク (*) を追加して、複数のレコードが作成されることを示すことができます。 これにより、複数のプロパティを 1 つのレコードに抽出する必要がなくなります。
{Name*:D avid Chew}
{City:Redmond}, {State:WA}
{Name*:Evan Narvaez}{Name*:Antonio Moreno}
{City:Issaquah}, {State:WA}
Type: | String[] |
Aliases: | TF |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-UpdateTemplate
このコマンドレットは、学習アルゴリズムの結果をテンプレート ファイルのコメントに保存することを示します。 これにより、アルゴリズムの学習プロセスが高速になります。 このパラメーターを使用するには、 TemplateFile パラメーターを使用してテンプレート ファイルも指定する必要があります。
Type: | SwitchParameter |
Aliases: | UT |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |