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

PowerShell读取逗号分隔TXT文件存入对应数组异常问题求助

问题原因

核心原因是没有提前初始化变量为数组类型,PowerShell默认会把首次赋值的变量识别为字符串类型,后续执行+=操作时会触发字符串拼接逻辑,而不是往数组追加元素,所以你访问$date[0]的时候实际是取拼接后长字符串的第一个字符,也就是2。

解决方法

方案1:保留原有多数组存储逻辑

首先在循环开始前提前初始化所有需要使用的空数组即可,修改后的完整代码如下:

# 提前初始化空数组
$date = @()
$time = @()
$speed = @()
$distancefront = @()
$distanceback = @()

foreach($line in Get-Content .\auto.txt) {
    # 注意:如果$regex变量未定义,这里的匹配条件会直接跳过所有行,可根据需求调整判断逻辑
    if($line -match $regex){
        $splitline = $line.Split(",")
        $date += $splitline[0]
        $time += $splitline[1]
        $speed += $splitline[2]
        $distancefront += $splitline[3]
        $distanceback += $splitline[4]
    }
}

修改后调用$date[0]就可以正常返回第一行的日期2003.09.23.。

方案2:更易维护的对象存储方案(推荐)

无需单独维护多个数组,直接把每行数据存为自定义对象,后续筛选、统计等操作更方便:

$autoRecords = Get-Content .\auto.txt | ForEach-Object {
    $splitline = $_.Split(",")
    [PSCustomObject]@{
        Date = $splitline[0]
        Time = $splitline[1]
        Speed = [int]$splitline[2]
        DistanceFront = [int]$splitline[3]
        DistanceBack = [int]$splitline[4]
    }
}

# 使用示例:获取第一条记录的日期
$autoRecords[0].Date
# 使用示例:筛选所有速度大于200的记录
$autoRecords | Where-Object Speed -gt 200

内容的提问来源于stack exchange,提问作者33lives

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:15:04