SplitTextUI.ps1

param(
    [Parameter(Mandatory)]
    $targetFile
)

Import-Module $PSSCriptRoot\PSProse.psm1 -Force

Add-Type -AssemblyName presentationframework

$XAML = @'
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        WindowStartupLocation="CenterScreen"
        Title="Split Text Buddy" Height="850" Width="850">
 
    <Grid>
 
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
 
        <Grid.RowDefinitions>
            <RowDefinition Height="42"/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition Height="250"/>
        </Grid.RowDefinitions>
 
        <StackPanel Orientation="Horizontal" Grid.Column="0" Grid.Row="0" Margin="3">
            <Button x:Name="btnSelectFile" Content=" Select File " Margin="3" Width="Auto" HorizontalAlignment="Left"/>
            <Button x:Name="btnCopyPowerShell" Content=" Copy PowerShell To Clipboard" Margin="3" Width="Auto" HorizontalAlignment="Left"/>
        </StackPanel>
 
        <GroupBox Header=" File Contents " Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Margin="3">
            <TextBox x:Name="tbFileContents" Margin="3"
                FontFamily="Consolas"
                FontSize="14"
                AcceptsReturn="True"
                AcceptsTab="True"
                VerticalScrollBarVisibility="Visible"
                HorizontalScrollBarVisibility="Visible"/>
        </GroupBox>
 
        <GroupBox Header=" Examples " Grid.Row="2" Grid.Column="0" Margin="3">
            <TextBox x:Name="tbExamples" Margin="3"
                FontFamily="Consolas"
                FontSize="14"
                AcceptsReturn="True"
                VerticalScrollBarVisibility="Visible"
                HorizontalScrollBarVisibility="Visible"/>
        </GroupBox>
 
        <GroupBox Header=" Headers " Grid.Row="2" Grid.Column="1" Margin="3">
            <TextBox x:Name="tbHeaders" Margin="3"
                FontFamily="Consolas"
                FontSize="14"
                AcceptsReturn="True"
                VerticalScrollBarVisibility="Visible"
                HorizontalScrollBarVisibility="Visible"/>
        </GroupBox>
 
        <GroupBox Header=" Parsed Results " Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" Margin="3">
            <TextBox x:Name="tbParsedResults" Margin="3"
                IsReadOnly="True"
                FontFamily="Consolas"
                FontSize="14"
                VerticalScrollBarVisibility="Visible"
                HorizontalScrollBarVisibility="Visible"/>
        </GroupBox>
 
        <GroupBox Header=" PowerShell " Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" Margin="3">
            <TextBox x:Name="tbPowerShell" Margin="3"
                IsReadOnly="True"
                FontFamily="Consolas"
                FontSize="14"
                VerticalScrollBarVisibility="Visible"
                HorizontalScrollBarVisibility="Visible"/>
        </GroupBox>
 
    </Grid>
</Window>
'@


function DoParse {

    # $examples = @()
    $headers = @()

    $constraints = $tbExamples.Text -split "`r`n"
    # foreach ($record in $tbExamples.Text -split "`r`n") {
    # $examples += $record
    # }

    foreach ($record in $tbHeaders.Text -split "`r`n") {
        $headers += $record
    }

    # $constraints = [Ordered]@{
    # 0 = $examples
    # }

    try {
        $tbParsedResults.Text = Invoke-SplitText -File $targetFile -Constraints $constraints -Header $headers | Format-Table | Out-String

        $tbPowerShell.Text = @"
`$constraints = $("'{0}'" -f ($constraints -join ", '"))
 
`$params = @{
    File = "$(Resolve-Path $targetFile)"
    Constraints = `$constraints
    Header = $("'{0}'" -f $($headers -join ", '"))
}
 
Invoke-SplitText @params
"@

    }
    catch {

    }
}

$Window = [Windows.Markup.XamlReader]::Load((New-Object System.Xml.XmlNodeReader ([xml]$XAML)))

$Window.Title = "Split Text Buddy - [$targetFile]"

$btnCopyPowerShell = $Window.FindName("btnCopyPowerShell")
$tbFileContents = $Window.FindName("tbFileContents")
$tbExamples = $Window.FindName("tbExamples")
$tbHeaders = $Window.FindName("tbHeaders")
$tbParsedResults = $Window.FindName("tbParsedResults")
$tbPowerShell = $Window.FindName("tbPowerShell")

$tbFileContents.Add_TextChanged( { DoParse } )
$tbExamples.Add_TextChanged( { DoParse })
$tbHeaders.Add_TextChanged( { DoParse })

$tbFileContents.Text = Get-Content -raw $targetFile
$btnCopyPowerShell.Add_Click( {
        $tbPowerShell.Text | Clip

        [System.Windows.MessageBox]::Show("Done", "Copy to Clipboard")
    })

$null = $tbExamples.Focus()
[void]$Window.ShowDialog()