次の方法で共有


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 つのプロパティがあることを認識しました。

  • 名前
  • 電話 する
  • 年齢

入力の各行は、サンプル一致によって評価されます。行がパターンに示されている例と一致する場合、値が抽出され、定義された出力変数に渡されます。

サンプル データ $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と同じ例です。唯一の違いは、必要な各プロパティのデータ型を含むパターン文字列にあります。 両方の例の age 列の配置の違いに注目してください。

例 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() の呼び出しで使用されます。

型:String
Aliases:DEL
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-IncludeExtent

このコマンドレットに、既定で削除されるエクステント テキスト プロパティが含まれていることを示します。

型:SwitchParameter
Aliases:IE
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-InputObject

パイプラインから受信した文字列、または文字列オブジェクトを含む変数を指定します。

型:String
配置:0
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-PropertyNames

結果のオブジェクトに分割値を割り当てるプロパティ名の配列を指定します。 分割または解析するすべてのテキスト行は、プロパティ値を表す要素を生成します。 要素がキャプチャ グループの結果であり、そのキャプチャ グループに名前が付けられている場合 ((?<name>)(?'name') など)、そのキャプチャ グループの名前がプロパティに割り当てられます。

PropertyName 配列に要素を指定した場合、それらの名前は、まだ名前が付いていないプロパティに割り当てられます。

フィールド数よりも多くのプロパティ名を指定した場合、Windows PowerShell は追加のプロパティ名を無視します。 すべてのフィールドに名前を付けるのに十分なプロパティ名を指定しない場合、Windows PowerShell は、名前が付けられていないすべてのプロパティ (P1、P2 など) に数値のプロパティ名を自動的に割り当てます。

型:String[]
Aliases:PN
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-TemplateContent

このコマンドレットが文字列を割り当てるプロパティを記述する式または変数として保存された式を指定します。 テンプレートフィールド仕様の構文は、{[optional-typecast]name(sequence-spec, example *):example-value}です。 たとえば、{PersonInfo*:{Name:Patti Fuller} です。

型:String[]
Aliases:TC
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-TemplateFile

文字列の目的の解析用のテンプレートを含むファイルを配列として指定します。 テンプレート ファイルでは、次の例に示すように、プロパティとその値は角かっこで囲まれています。 Name プロパティとそれに関連する他のプロパティなどのプロパティが複数回表示される場合は、アスタリスク (*) を追加して、複数のレコードが作成されることを示すことができます。 これにより、1 つのレコードに複数のプロパティが抽出されるのを回避できます。

{名前*:D avid Chew}

{市区町村:レドモンド}, {州:WA}

{名前*:エヴァン・ナルバエス}{名前*:アントニオ・モレノ}

{市:Issaquah}, {州:WA}

型:String[]
Aliases:TF
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-UpdateTemplate

このコマンドレットは、学習アルゴリズムの結果をテンプレート ファイル内のコメントに保存することを示します。 これにより、アルゴリズムの学習プロセスが高速になります。 このパラメーターを使用するには、TemplateFile パラメーターを持つテンプレート ファイルも指定する必要があります。

型:SwitchParameter
Aliases:UT
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

String