在内存中为哈希表指定上一行

时间:2014-04-25 13:11:16

标签: powershell csv hashtable

我正在将文本文件转换为目前在内存中保存的csv,直到我的编辑结束。我用4或6标记每一行。我到了一个点,我逐行遍历表。如果它有6我做一件事,4我做其他事。它会像,

  

6,4,6,4,4,6,4,4,6

每个6之间有4个数字。为了跟踪4个,我有一个计数器。我还有一个计数每行的计数器。当我想通过rowCounter指定一行时,问题出现了。我希望能够做到像$ rowCount这样的东西 - 当我进入6并且fourCount不为零时。这样我就可以将数据输出到它上面的第4行。

$fourCount = 0
$rowCount = 0
foreach($row in $ResultsTable){
  if ($row.'RowType' -eq 6) {
    if ($fourCount -gt 0) {
      #Sort-Object {$row.'CheckDate'} -descending
      $remainAmount = $currentAmount - $checkAmount
      Write-Host "Counter no longer 0, resetting counter"
      $currentAmount = @()
    }
    $checkAmount = $row.'check'
    Write-Host "This line starts with 6"
    $rowCount = $rowCount + 1
  } elseif ($row.'RowType' -eq 4) {
    $currentAmount += $row.'check'
    $rowCount = $rowCount + 1
    $fourCount++
    Write-Host "This line starts with 4"
  } else {
    Continue
  }
}

以下是我填充CSV的每一行的方法

$files = Get-ChildItem $source *.txt
$content = Get-Content $files

foreach ($line in $content) {
  if ($line.StartsWith("6")) {
    $output = $ResultsTable.Rows.Add($line.Substring(0,1), $line.Substring(1,3), $line.Substring(4,3), $line.Substring(7,10), $line.Substring(17,20), $line.Substring(37,8))
  } elseif ($line.StartsWith("4")) {
    $cleanInvNum = $line.Substring(11).Replace("-A", "")
    $output = $ResultsTable.Rows.Add($line.Substring(0,1), $line.Substring(1,3), $line.Substring(4,3), " ", " ", " ", $cleanInvNum, " ")
  }
}

有谁知道怎么做?

1 个答案:

答案 0 :(得分:1)

根据评论,您需要返回原始集合,以获取循环枚举器并将该行引用为:

 $ResultsTable.Rows[$rowCount]