2016-09-09 6 views
1

ich die folgende Textdatei in Powershell-Objekte analysieren möchten:eine Textdatei in mehrere Powershell-Parsing-Objekte

OBJECT Table 60000 My table 1 
{ 
    OBJECT-PROPERTIES 
    { 
    Date=09-09-16; 
    Time=11:27:31; 
    Modified=Yes; 
    Version List=; 
    } 
} 

OBJECT Page 60001 My Page 
{ 
    OBJECT-PROPERTIES 
    { 
    Date=09-09-16; 
    Time=11:28:18; 
    Modified=Yes; 
    Version List=; 
    } 
} 

Die OBJECT-PROPERTIES sollte Eigenschaften der Powershell-Objekte sein. Ich möchte auch, dass der Text des Objekts in das Objekt aufgenommen wird.

Ich habe gesagt, um einen regulären Ausdruck zu machen, aber ich weiß nicht, wie alle diese Informationen in einen regulären Ausdruck zu analysieren.

Mein Objekt ist weit länger als 2 Objekte, aber nur für die Beispiele, seine nur 2 Objekte.

Erwartete Ausgabe:

Object1: 
    Type: Table 
    Number: 60000 
    Name: "My table 1" 
    Date: "09-09-16" 
    Time: "11:28:18" 
    Modified: "Yes" 
    "Version List": "" 
    Object: "<All of the text in this object>" 

Object2: 
    Type: Page 
    Number: 60001 
    Name: "My Page" 
    Date: "09-09-16" 
    Time: "11:28:18" 
    Modified: "Yes" 
    "Version List": "" 
    Object: "<All of the text in this object>" 

Antwort

1

ich es geschafft, folgendes zu tun:

$txt = "OBJECT Table 60000 My table 1 
{ 
    OBJECT-PROPERTIES 
    { 
    Date=09-09-16; 
    Time=11:27:31; 
    Modified=Yes; 
    Version List=; 
    } 
} 

OBJECT Page 60001 My Page 
{ 
    OBJECT-PROPERTIES 
    { 
    Date=09-09-16; 
    Time=11:28:18; 
    Modified=Yes; 
    Version List=; 
    } 
}" 
$expr = "(?<Object>OBJECT (?<Type>\w+) (?<Number>\d+) (?<Name>[\w ]+)\s*{\s*OBJECT-PROPERTIES\s*{\s*Date=(?<Date>[\d-]+);\s*Time=(?<Time>[\d:]+);\s*Modified=(?<Modified>\w+);\s*Version List=(?<Version>[^;]*);\s*}\s*})" 
[Regex]::Matches($txt, $expr) | % { 
    [PSCustomObject]@{ 
     Type = $_.Groups["Type"].Value; 
     Number = $_.Groups["Number"].Value; 
     Name = $_.Groups["Name"].Value; 
     Date = $_.Groups["Date"].Value; 
     Time = $_.Groups["Time"].Value; 
     Modified = $_.Groups["Modified"].Value; 
     "Version List" = $_.Groups["Version"].Value; 
     Object = $_.Groups["Object"].Value 
    } 
} 

Ausgang:

Type   : Table 
Number  : 60000 
Name   : My table 1 
Date   : 09-09-16 
Time   : 11:27:31 
Modified  : Yes 
Version List : 
Object  : OBJECT Table 60000 My table 1 
       { 
       OBJECT-PROPERTIES 
       { 
        Date=09-09-16; 
        Time=11:27:31; 
        Modified=Yes; 
        Version List=; 
       } 
       } 

Type   : Page 
Number  : 60001 
Name   : My Page 
Date   : 09-09-16 
Time   : 11:28:18 
Modified  : Yes 
Version List : 
Object  : OBJECT Page 60001 My Page 
       { 
       OBJECT-PROPERTIES 
       { 
        Date=09-09-16; 
        Time=11:28:18; 
        Modified=Yes; 
        Version List=; 
       } 
       } 
1

Hier ist ein Beispiel whith ein regex alle Eigenschaften mit Ausnahme des Objekts zu erfassen selbst (Sie einen neuen für den brauchen oder mit verschachtelten einfangenden Gruppen arbeiten):

$regex = 'OBJECT\s+(?<type>\w+)\s+(?<number>\d+)\s+(?<name>.+?)\s{.*?Date=(?<date>[^;]+).*?Time=(?<time>.+?);.*?Modified=(?<modified>.+?);.*?Version List=(?<versionlist>.*?);' 
$content = Get-Content $scripts.tmp 
$matches = [regex]::Matches($content, $regex) 
$matches | ForEach-Object { 
    [PSCustomObject]@{ 
     Type = $_.Groups['type'].Value 
     Number = $_.Groups['number'].Value 
     Name = $_.Groups['name'].Value 
     Date = $_.Groups['date'].Value 
     Time = $_.Groups['time'].Value 
     Modified = $_.Groups['modified'].Value 
     "Version List" = $_.Groups['versionlist'].Value 
    } 
} 

Ausgang:

Type   : Table 
Number  : 60000 
Name   : My table 1 
Date   : 09-09-16 
Time   : 11:27:31 
Modified  : Yes 
Version List : 

Type   : Page 
Number  : 60001 
Name   : My Page 
Date   : 09-09-16 
Time   : 11:28:18 
Modified  : Yes 
Version List : 

Regex:

OBJECT\s+(?<type>\w+)\s+(?<number>\d+)\s+(?<name>.+?)\s{.*?Date=(?<date>[^;]+).*?Time=(?<time>.+?);.*?Modified=(?<modified>.+?);.*?Version List=(?<versionlist>.*?); 

Regular expression visualization