$file = "D:\Profile Data\Dustin\Desktop\game1.txt"
$game = Get-Content $file
$rallyTables = @{}
function MakeActionTable
{
$dt = New-Object System.Data.DataTable
$c1 = New-Object System.Data.DataColumn 'player',([string])
$c2 = New-Object System.Data.DataColumn 'action',([string])
$c3 = New-Object System.Data.DataColumn 'score1',([int])
$c4 = New-Object System.Data.DataColumn 'score2',([int])
$dt.Columns.Add($c1)
$dt.Columns.Add($c2)
$dt.Columns.Add($c3)
$dt.Columns.Add($c4)
return, $dt
}
function AddActRow($dt, $pla, $act, $s1, $s2)
{
$row = $dt.NewRow()
$row.action = $act
$row.player = $pla
$row.score1 = $s1
$row.score2 = $s2
$dt.Rows.Add($row)
}
$gameTable = MakeActionTable
$rallyNo = 1
foreach ($rally in $game)
{
$scoreString = $rally.Substring(0,$rally.IndexOf(',')).Replace('(','').Replace(')','').Split('-')
$s1 = $scoreString[0]
$s2 = $scoreString[1]
$plays = $rally.Substring($rally.IndexOf(", "))
$plays = $plays.Substring(0,$plays.LastIndexOf(","))
$actions = $plays.Split(',')
$rallyTables[$rallyNo] = MakeActionTable
foreach ($action in $actions)
{
if ($action)
{
$thisAction = $action.Split('(').Replace(')','').Trim()
AddActRow $rallyTables[$rallyNo] $thisAction[1] $thisAction[0] $s1 $s2
}
}
$gameTable.Merge($rallyTables[$rallyNo])
$rallyNo++
}
foreach ($row in $gameTable.Rows)
{
Write-Host $row.player"|"$row.action"-"$row.score1":"$row.score2
}
$file = "D:\Profile Data\Dustin\Desktop\game1.txt"
$game = Get-Content $file
$rallyTables = @{}
function MakeActionTable
{
$dt = New-Object System.Data.DataTable
$c1 = New-Object System.Data.DataColumn 'player',([string])
$c2 = New-Object System.Data.DataColumn 'action',([string])
$c3 = New-Object System.Data.DataColumn 'score1',([int])
$c4 = New-Object System.Data.DataColumn 'score2',([int])
$dt.Columns.Add($c1)
$dt.Columns.Add($c2)
$dt.Columns.Add($c3)
$dt.Columns.Add($c4)
return, $dt
}
function AddActRow($dt, $pla, $act, $s1, $s2)
{
$row = $dt.NewRow()
$row.action = $act
$row.player = $pla
$row.score1 = $s1
$row.score2 = $s2
$dt.Rows.Add($row)
}
$gameTable = MakeActionTable
$rallyNo = 1
foreach ($rally in $game)
{
$scoreString = $rally.Substring(0,$rally.IndexOf(',')).Replace('(','').Replace(')','').Split('-')
$s1 = $scoreString[0]
$s2 = $scoreString[1]
$plays = $rally.Substring($rally.IndexOf(", "))
$plays = $plays.Substring(0,$plays.LastIndexOf(","))
$actions = $plays.Split(',')
$rallyTables[$rallyNo] = MakeActionTable
foreach ($action in $actions)
{
if ($action)
{
$thisAction = $action.Split('(').Replace(')','').Trim()
AddActRow $rallyTables[$rallyNo] $thisAction[1] $thisAction[0] $s1 $s2
}
}
$gameTable.Merge($rallyTables[$rallyNo])
$rallyNo++
}
#calculate actions
$ps = $gameTable.DefaultView.ToTable($true, "player")
$as = $gameTable.DefaultView.ToTable($true, "action")
foreach ($p in $ps)
{
foreach ($a in $as)
{
if ($a.action.Substring(0,1) -ne "-")
{
$count = $gameTable.Select("action = '$($a.action)' AND player='$($p.player)'").Length
$ncount = $gameTable.Select("action = '-$($a.action)' AND player='$($p.player)'").Length
$adjCount = $count - $ncount
if ($adjCount -gt 0)
{
Write-Host "+"$count "-"$ncount
Write-Host "Player "$p.player" did action "$a.action" "$adjCount" times."
}
}
}
}
+ 2 - 1
Player 2 did action DigErr 1 times.
$file = "C:\test\game1.txt"
$game = Get-Content $file
$rallyTables = @{}
function MakeActionTable
{
$dt = New-Object System.Data.DataTable
$c1 = New-Object System.Data.DataColumn 'player',([string])
$c2 = New-Object System.Data.DataColumn 'action',([string])
$c3 = New-Object System.Data.DataColumn 'score1',([int])
$c4 = New-Object System.Data.DataColumn 'score2',([int])
$dt.Columns.Add($c1)
$dt.Columns.Add($c2)
$dt.Columns.Add($c3)
$dt.Columns.Add($c4)
return, $dt
}
function AddActRow($dt, $pla, $act, $s1, $s2)
{
$row = $dt.NewRow()
$row.action = $act
$row.player = $pla
$row.score1 = $s1
$row.score2 = $s2
$dt.Rows.Add($row)
}
function ReportAction($1, $2, $type)
{
if ($type -eq "play")
{$string = "Player " + $1 + " had action " + $2 + ". " }
else {$string = "Score is " + $s1 + "-" + $s2 + "."}
return $string
}
$gameTable = MakeActionTable
$rallyNo = 1
foreach ($rally in $game)
{
$report = ""
$scoreString = $rally.Substring(0,$rally.IndexOf(',')).Replace('(','').Replace(')','').Split('-')
$s1 = $scoreString[0]
$s2 = $scoreString[1]
$plays = $rally.Substring($rally.IndexOf(", "))
$plays = $plays.Substring(0,$plays.LastIndexOf(","))
$actions = $plays.Split(',')
$rallyTables[$rallyNo] = MakeActionTable
foreach ($action in $actions)
{
if ($action)
{
$thisAction = $action.Split('(').Replace(')','').Trim()
AddActRow $rallyTables[$rallyNo] $thisAction[1] $thisAction[0] $s1 $s2
$report = $report + (ReportAction $thisAction[1] $thisAction[0] "play")
}
}
$report = $report + (ReportAction $s1 $s2 "score")
$gameTable.Merge($rallyTables[$rallyNo])
$rallyNo++
Write-Host $report
}
<#calculate actions
$ps = $gameTable.DefaultView.ToTable($true, "player")
$as = $gameTable.DefaultView.ToTable($true, "action")
foreach ($p in $ps)
{
foreach ($a in $as)
{
if ($a.action.Substring(0,1) -ne "-")
{
$count = $gameTable.Select("action = '$($a.action)' AND player='$($p.player)'").Length
$ncount = $gameTable.Select("action = '-$($a.action)' AND player='$($p.player)'").Length
$adjCount = $count - $ncount
if ($adjCount -gt 0)
{
Write-Host "+"$count "-"$ncount
Write-Host "Player "$p.player" did action "$a.action" "$adjCount" times."
}
}
}
} #>
Player 2 had action SR-3. Player 13 had action AT. Player 25 had action BE. Score is 0-1.
Player THEM had action SE. Score is 1-1.
Player 13 had action S. Player 25 had action AT. Player 13 had action D. Player 23 had action AT. Player 5 had action BE. Score is 1-2.
Player 10 had action SR-3. Player 5 had action K. Score is 2-2.
Player 25 had action S. Player THEM had action K. Score is 2-3.
Player 23 had action SR-1. Player 23 had action E. Score is 2-4.
Player 2 had action SR-3. Player 5 had action AT. Player 2 had action D. Player 23 had action AT. Player 10 had action D. Player 6 had action A. Player 25 had ac
tion K. Score is 3-4.
Player 23 had action D. Player 2 had action DigErr. Score is 3-5.
Player 10 had action SR-1. Player 6 had action A. Player 10 had action K. Score is 4-5.
Player 5 had action SE. Score is 4-6.
Player 23 had action SR-1. Player 13 had action E. Score is 4-7.
Player 10 had action SR-3. Player 6 had action A. Player 13 had action K. Score is 5-7.
Player 6 had action S. Player THEM had action K. Score is 5-8.
Player THEM had action SA. Score is 5-9.
Player 10 had action SR-3. Player 10 had action E. Score is 5-10.
Player 2 had action SR-3. Player 13 had action AT. Player 13 had action BA. Player 10 had action BA. Score is 6-10.
Player 10 had action S. Player 23 had action D. Player 6 had action A. Player 25 had action K. Score is 7-10.
Player 10 had action S. Player 2 had action D. Player 6 had action A. Player 25 had action K. Score is 8-10.
Player 10 had action S. Player 23 had action D. Player 23 had action E. Score is 8-11.
Player 23 had action SR-3. Player 6 had action A. Player 25 had action K. Score is 9-11.
Player 10 had action S. Player 10 had action -S. Player 13 had action S. Player 23 had action D. Player 23 had action E. Score is 9-12.
Player THEM had action SE. Score is 10-12.
Player 1 had action S. Player THEM had action E. Score is 11-12.
Player 1 had action SE. Score is 11-13.
Player 2 had action SR-3. Player 1 had action A. Player 23 had action K. Score is 12-13.
Player 23 had action S. Player 2 had action DigErr. Score is 12-14.
Player 2 had action -DigErr. Score is 12-13.
Player 2 had action D. Player 1 had action D. Player 23 had action A. Player 12 had action K. Score is 13-13.
Player 23 had action S. Player 10 had action AT. Player 10 had action D. Player THEM had action BS. Score is 13-14.
Player 10 had action SR-3. Player 10 had action AT. Player 5 had action AT. Player 1 had action D. Player THEM had action BS. Score is 13-15.
Player 10 had action SR-3. Player 1 had action A. Player 23 had action K. Score is 14-15.
Player 5 had action S. Player 23 had action D. Player 1 had action BHE. Score is 14-16.
Player THEM had action SE. Score is 15-16.
Player 6 had action S. Player THEM had action DigErr. Score is 16-16.
Player 6 had action S. Player 25 had action BA. Player 13 had action BA. Score is 17-16.
Player 6 had action S. Player THEM had action K. Score is 17-17.
Player 10 had action SR-2. Player 25 had action AT. Player 25 had action BE. Score is 17-18.
Player 10 had action SR-1. Player 25 had action AT. Player 13 had action BE. Score is 17-19.
Player 23 had action SR-3. Player 25 had action AT. Player 2 had action D. Player 13 had action AT. Player 13 had action BA. Player 10 had action BA. Score is 1
8-19.
Player 10 had action S. Player 2 had action D. Player 23 had action AT. Player 6 had action D. Player 25 had action AT. Player 6 had action A. Player 25 had acti
on K. Score is 19-19.
Player 10 had action S. Player 13 had action AT. Player 2 had action D. Player 2 had action D. Player 6 had action D. Player 23 had action AT. Player 6 had actio
n A. Player 25 had action K. Score is 20-19.
Player 10 had action S. Player 6 had action D. Player 25 had action AT. Player 6 had action D. Player 25 had action AT. Player THEM had action E. Score is 21-19
.
Player 10 had action S. Player 10 had action -S. Player 10 had action S. Score is 22-19.
Player 10 had action S. Score is 23-19.
Player 10 had action S. Player THEM had action K. Score is 23-20.
Player THEM had action SE. Score is 24-20.
Player 3 had action S. Player 3 had action D. Player 23 had action E. Score is 24-21.
Player 23 had action SR-3. Player 6 had action A. Player 25 had action K. Score is 25-21.
function ReportAction($1, $2, $type) {
if ($type -eq "play") {
switch ($2) {
'S' {$play = 'a serve';break}
'SA' {$play = 'an ACE serve';break}
'SE' {$play = 'a service error';break}
'AT' {$play = 'an attack attempt';break}
'K' {$play = 'a Kill';break}
'BS' {$play = 'a solo block';break}
'BA' {$play = 'a block assist';break}
'BE' {$play = 'a block error';break}
'A' {$play = 'an assist';break}
'D' {$play = 'a dig';break}
'E' {$play = 'an attack error';break}
'DigErr' {$play = 'a dig error';break}
'BHE' {$play = 'a ball handling error';break}
{$PSItem -like 'SR-?'} {
$Rating=$2.Split('-')[1]
$play = "a pass rating of $rating"
break
}
default {
''
}
} #end switch
$string = ('{0} recorded {1}' -f $1, $play)
} else {
$string = ('Score is {0}-{1}' -f $1, $2)
}
return $string
}
$file = "C:\test\game1.txt"
$game = Get-Content $file
$rallyTables = @{}
function MakeActionTable
{
$dt = New-Object System.Data.DataTable
$c1 = New-Object System.Data.DataColumn 'player',([string])
$c2 = New-Object System.Data.DataColumn 'action',([string])
$c3 = New-Object System.Data.DataColumn 'score1',([int])
$c4 = New-Object System.Data.DataColumn 'score2',([int])
$c5 = New-Object System.Data.DataColumn 'rally',([int])
$c6 = New-Object System.Data.DataColumn 'step',([int])
$dt.Columns.Add($c1)
$dt.Columns.Add($c2)
$dt.Columns.Add($c3)
$dt.Columns.Add($c4)
$dt.Columns.Add($c5)
$dt.Columns.Add($c6)
return, $dt
}
function AddActRow($dt, $pla, $act, $s1, $s2, $rn, $stp)
{
$row = $dt.NewRow()
$row.action = $act
$row.player = $pla
$row.score1 = $s1
$row.score2 = $s2
$row.rally = $rn
$row.step = $stp
$dt.Rows.Add($row)
}
function ReportAction($1, $2, $type)
{
if ($2.Substring(0,1) -ne "-")
{
if ($type -eq "play")
{$string = "Player " + $1 + " had action " + $2 + ". " }
else {$string = "Score is " + $s1 + "-" + $s2 + "."}
return $string
}
}
$gameTable = MakeActionTable
$rallyNo = 1
foreach ($rally in $game)
{
$report = ""
$step = 1
$scoreString = $rally.Substring(0,$rally.IndexOf(',')).Replace('(','').Replace(')','').Split('-')
$s1 = $scoreString[0]
$s2 = $scoreString[1]
$plays = $rally.Substring($rally.IndexOf(", "))
$plays = $plays.Substring(0,$plays.LastIndexOf(","))
$actions = $plays.Split(',')
$rallyTables[$rallyNo] = MakeActionTable
foreach ($action in $actions)
{
if ($action)
{
$thisAction = $action.Split('(').Replace(')','').Trim()
AddActRow $rallyTables[$rallyNo] $thisAction[1] $thisAction[0] $s1 $s2 $rallyNo $step
$report = $report + (ReportAction $thisAction[1] $thisAction[0] "play")
$step++;
}
}
$report = $report + (ReportAction $s1 $s2 "score")
$gameTable.Merge($rallyTables[$rallyNo])
$rallyNo++
Write-Host $report
}
S = Serve, SA = Service ACE, SE = Service Error
K = Kill, AT = Attempt, E = hitting error
BS = Solo block, BA = Block Assist, BE = Blocking error
D = Dig, DigErr = Digging error
BHE = Ball Handling Error
A = Assist
SR-0, SR-1, SR-2, SR-3 are degrees of a pass rating. 0 = lost point, 3 = perfect