我需要在每一行增加变量,但在行结束后还要重置计数器

时间:2017-05-23 11:18:10

标签: html powershell replace

我是Powershell的新手,所以在这里寻求帮助。

我需要一个PowerShell脚本,它会读取txt文件并递增每个x变量+1,但计数器会在1行后重置。

样品(原始):

  

促销活动于美国东部时间2017年5月8日凌晨12:00开始< x id =“8”   />并于2017年6月9日美国东部时间晚上11:59结束(“< x id =”9“   />促销期< x id =“10”/>“)

期望的输出:

  

促销活动于美国东部时间2017年5月8日凌晨12:00开始< x1 id =“8”   />并于2017年6月9日美国东部时间晚上11:59结束(“< x2 id =”9“   />促销期< x3 id =“10”/>“)

这是一行,因此它应该再次将计数器重置为1(1..n)

我找到了一个获取所有文件内容并增加所有值的脚本,这不是我所追求的。

我还在研究,所以稍后会更新。

到目前为止更新脚本:

$reader = [System.IO.File]::OpenText("testfile")
#IF ([System.IO.File]::Exists($args[0])) { $contents = [System.IO.File]::ReadAllText($args[0]) } ELSE {  
   # ECHO "File does not exist!" }
try {
    for() {
        $line = $reader.ReadLine()
        if ($line -eq $null) { break }
          
        $numbers =  
        [System.Text.RegularExpressions.Regex]::Matches($line, "<x")

        for ($i = $numbers.Count - 1; $i -ge 0; $i--)
{
    
    Write-Host ($numbers[$i].Index + $numbers[$i].Length)
    
    $line = $line.Substring(0, $numbers[$i].Index) +  
        ($i + 1).ToString() +  
        $line.Substring($numbers[$i].Index + $numbers[$i].Length)
}

        $line
    }
}
finally {
    $reader.Close()
}

它实现了增量,但实际正则表达式匹配消失 代码之后:

  

促销活动于美国东部时间2017年5月8日凌晨12:00开始 1 id =“8”/&gt;并于2017年6月9日美国东部时间晚上11点59分结束(“< strong> 2 id =“”/&gt;促销期 3 id =   “10”/&gt;“)。

应该是:

  

促销活动于美国东部时间2017年5月8日凌晨12:00开始&lt; x1 id =“8”/&gt;并于2017年6月9日东部时间晚上11:59结束&gt;( “&lt; x2 id =”“/&gt;促销期&gt; &lt; x3 id =”10“/&gt;”)。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您发布的脚本正在发生变化但却错过了

CHAR_BIT == 8

答案 1 :(得分:0)

您是否有到目前为止尝试过的脚本,或者您希望社区为您编写它?

无论哪种方式,这都是社区其他成员调试和完善的开始......

$content = 'Promotion begins at 12:00 am ET on May 8, 2017 <x3 id="8" />and ends at 11:59 pm ET on June 9, 2017 (“<x id="9" />Promotion Period <x id="10" />”)'
$test = ""

ForEach($line in $content){
$splitline = $line -match '\<x\d* id\='
switch ($Matches[0]){
     "<x id=" {$test = $line.replace($Matches[0],"<x1 id=") ; break}
     "<x1 id=" {$test = $line.replace($Matches[0],"<x2 id=") ; break}
     "<x2 id=" {$test = $line.replace($Matches[0],"<x3 id=") ; break}
     "<x3 id=" {$test = $line.replace($Matches[0],"<x4 id=") ; break}
     "<x4 id=" {$test = $line.replace($Matches[0],"<x5 id=") ; break}
     default {"Something else happened"; break}
     }
write-host $test
    }

对不起,我不会在您更改原始帖子时继续更新上面的代码段。