You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:PowerShell行转列脚本(适配重复PC等特殊场景)

PowerShell 实现行转列(Open/Close 配对)

你的需求是将按时间顺序的State记录转换为PC的Open/Close配对行,需要处理同一PC的多组启停、缺失Close的记录,以及舍弃只有Close的记录。原脚本按PC分组无法区分多组启停,因此需要调整逻辑,以下是解决方案:

# 假设 $data 是已导入的原始数据(比如从CSV读取或预定义的对象数组)
# 先按PC和时间排序,确保处理顺序符合时间先后
$sortedData = $data | Sort-Object PC, Time

# 用于跟踪未配对的Open记录
$openEntries = @{}
$result = @()

foreach ($entry in $sortedData) {
    switch ($entry.State) {
        'Open' {
            # 将当前Open记录存入字典,等待后续Close配对
            $openEntries[$entry.PC] = $entry
        }
        'Close' {
            # 检查是否有对应PC的未配对Open记录
            if ($openEntries.ContainsKey($entry.PC)) {
                $openRecord = $openEntries[$entry.PC]
                # 生成配对后的结果行
                $result += [pscustomobject]@{
                    PC    = $openRecord.PC
                    Open  = $openRecord.Time
                    Close = $entry.Time
                }
                # 移除已完成配对的Open记录
                $openEntries.Remove($entry.PC)
            }
            # 无对应Open的Close记录(如PC5)直接跳过,不加入结果
        }
    }
}

# 处理剩余未配对的Open记录(如PC4)
foreach ($pc in $openEntries.Keys) {
    $openRecord = $openEntries[$pc]
    $result += [pscustomobject]@{
        PC    = $openRecord.PC
        Open  = $openRecord.Time
        Close = $null
    }
}

# 格式化输出结果
$result | Format-Table -AutoSize

关键逻辑说明

  • 排序处理:先按PC和时间排序,确保Open和对应的Close能按时间顺序正确配对。
  • 未配对跟踪:用字典$openEntries暂存每个PC的未完成Open记录,遇到Close时立即配对并移除字典中的对应记录。
  • 边缘场景处理:
    • 仅存在Close的记录(如PC5):因找不到对应Open,直接跳过不输出。
    • 仅存在Open的记录(如PC4):遍历结束后,字典中剩余的记录单独生成结果行,Close字段留空。
    • 同一PC多组启停(如PC1的两次Open/Close):每次配对后清空对应PC的暂存记录,新的Open会重新存入字典等待下一次Close配对。

运行后将得到你期望的输出:

PC    Open       Close
----  ----       -----
PC1   00:09:16   00:09:21
PC2   00:09:48   00:20:08
PC3   00:12:50   00:15:14
PC4   00:12:50
PC1   00:13:42   00:22:24

内容的提问来源于stack exchange,提问作者Алдар

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:32:45