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

如何基于Read-Host输入从文本文件数组中提取对应行的指定值?

实现根据职位名称匹配对应代码的PowerShell脚本

问题背景

我有一个文本文件JobTitle.txt,内容如下:

Sales Co-Worker, TSALES, TSALSK;Business Navigator, BNOM, BNOMD

希望编写PowerShell代码实现:读取用户输入的职位名称,匹配文件中对应条目后,输出该条目的第二个和第三个值。我自己写了部分代码,但需要完善。

修正后的完整代码

# 读取职位数据库文件(-Raw参数一次性获取全部内容)
$jobtitledb = Get-Content C:\Users\Username\Desktop\Scripts\JobTitle.txt -Raw

# 将文件内容按中文分号分割为单个职位条目,清理空格并过滤空条目
$jobEntries = $jobtitledb -split ';' | ForEach-Object { $_.Trim() } | Where-Object { $_ }

# 获取用户输入的职位名称
$jobtitleinput = Read-Host 'Input the job title'

# 初始化变量用于判断是否找到匹配
$foundMatch = $false

# 遍历每个职位条目进行匹配
foreach ($entry in $jobEntries) {
    # 按逗号分割条目,同时清理每个字段的前后空格
    $title, $basicCode, $extendedCode = $entry -split ',' | ForEach-Object { $_.Trim() }
    
    # 支持不区分大小写的精确匹配,同时加入模糊匹配(输入部分名称也能找到结果)
    if ($title.Equals($jobtitleinput, [System.StringComparison]::OrdinalIgnoreCase) -or 
        $title -like "*$jobtitleinput*") {
        Write-Host "Basic code: $basicCode"
        Write-Host "Extended code: $extendedCode"
        $foundMatch = $true
        break  # 找到匹配后退出循环,避免重复输出
    }
}

# 如果没有找到匹配项,给出提示
if (-not $foundMatch) {
    Write-Host "Oops, no matching job title found. Please check your input."
}

代码说明

  • 文件读取处理:用-Raw读取整个文件内容,解决了原文件中用中文分号分隔多个职位的问题,确保每个职位条目被正确拆分
  • 字段清理:对每个分割后的字段执行Trim(),避免字段前后的空格干扰匹配逻辑
  • 匹配优化:支持不区分大小写的精确匹配,同时加入模糊匹配(输入职位名称的部分内容也能匹配),提升用户使用体验
  • 反馈完善:增加了未匹配时的提示信息,让用户清楚知道输入的职位名称不存在
  • 效率优化:找到匹配项后立即退出循环,避免不必要的遍历

原代码的问题修正

  1. 原代码未处理文件中用中文分号分隔职位的情况,导致拆分逻辑错误
  2. 错误地将用户输入赋值给拆分后的变量,没有实现核心的匹配逻辑
  3. 未处理字段前后的空格,可能导致匹配失败
  4. 缺少未匹配时的反馈提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:22:06