gpt4 book ai didi

string - 比较foreach内部的字符串

转载 作者:行者123 更新时间:2023-12-03 01:14:51 25 4
gpt4 key购买 nike

我想在PowerShell中比较2个字符串。一个是实际日期,另一个将从包含很多行的文件中读取。该行始终将包含相同的结构,然后我们可以提取一个子字符串以比较日期。
该文件将是纯文本。日期和子字符串的类型相同。

我的问题:
如果我执行此代码,则程序不会编写任何内容,即使字符串相同,Write-Host也不会执行。有人能帮我吗?

$list = Import-Csv C:\file.txt

#actual date
$date = Get-date -Format d
$day = $fecha.Substring(0,2)
$month = $fecha.Substring(3,2)
$year = $fecha.Substring(6,4)
$date = "$year$month$day"

#I do this because if I use $list will return me an pscustomobject object
$file = Get-Content -Path C:\file.txt

#Use a ForEach loop to process all lines in the source file
foreach ($row in $file) {
$sub = $entrada.Substring(7,7)

if ($date-like $sub) {Write-Host "They are equals"}
if ($sub -Match $date) {Write-Host "They are equals"}
if ($date.Equals($sub)) {Write-Host "They are equals"}
if ($date-eq $sub) {Write-Host "They are equals"}
if ($sub -contains $date) {Write-Host "They are equals"}
}

最佳答案

您的引用日期字符串长8个字符,但是从行中提取的字符串只有7个字符,因此不太可能匹配。特别是因为您仔细选择了比较项,以免发生意外匹配。 ;)而且,正如@ arco444在问题注释中指出的那样,循环变量$row从未在循环内的任何地方使用。

我建议将代码简化为以下形式:

$date = Get-Date -f 'yyyyMMdd'

Get-Content -Path 'C:\file.txt' | Where-Object { $_.Substring(7,8) -eq $date }

那只会列出输入文件中包含匹配日期的行。

另一种选择是在每一行上使用 Contains()方法:
Get-Content -Path 'C:\file.txt' | Where-Object { $_.Contains($date) }

但这会在一行中的任何地方找到匹配的日期,而不仅仅是在给定位置。

我会避免使用通配符( -like)或正则表达式( -match)检查,因为您要比较固定值而不是模式。而且您不能使用 -contains运算符,因为该运算符用于检查数组是否包含特定元素。

关于string - 比较foreach内部的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32136975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com