经过一周的尝试,我不得不问你这个问题。

文件输入:

DD/MM                                                                                
 
27,28    
 
14,21                                                                                                                
1                                                                                                               
15                                                               
 
7                                                                                                                    
12                                                                                                                   
2,15                                                                                                                 
25 

此文件的每一行代表一个月,所以即使它是空的,它仍然应该算在内,以便可以进行格式化。然后基于文件输入,期望的输出是:

期望的输出:

DD/MM 
27/02 
28/02 
14/04 
21/04 
01/05 
15/06 
07/09 
12/10 
02/11 
15/11 
25/12 

到目前为止我得到了什么并卡在这里:

#getting the content into an array and formatting the .DAT file  
$lines = Get-Content $outfileBR 
 
If ($lines[0] -eq "DD/MM") { 
     $HEADER = $lines[0] + $linebreak 
}  
 
If ($lines[1] -eq '') { 
     continue 
} Else { 
     $BRFILE  = $lines[1].SUBSTRING(0,2) + "/01" + $linebreak 
     $BRFILE += $lines[1].SUBSTRING(3,2) + "/01" + $linebreak         
} 
 
If ($lines[2] -eq '') { 
     continue 
} Else { 
     $BRFILE2  = $lines[2].SUBSTRING(0,2) + "/02" + $linebreak 
     $BRFILE2 += $lines[2].SUBSTRING(3,2) + "/02" + $linebreak 
} 
 
If ($lines[3] -eq '') { 
     continue 
} Else { 
     $BRFILE3  = $lines[3].SUBSTRING(0,2) + "/03" + $linebreak 
     $BRFILE3 += $lines[3].SUBSTRING(3,2) + "/03" + $linebreak 
} 
 
Set-Content $BRdatFile ($HEADER + $BRFILE + $BRFILE2 + $BRFILE3) 

结果:

DD/MM 
  /01 
  /01 
27/02 
28/02 
  /03 
  /03 

就像我说的,每一行都代表一个月,但如果该行是空的(如输入文件中所示),我将不会在输出中显示它。但在我的结果中,一月显示为/01,三月显示为/03,依此类推。

请问我做错了什么?

请您参考如下方法:

与 Ronald Rink 'd-fens' 给出的答案非常相似,我会在一个循环中做一个循环,但是因为我们知道文件中应该有多少行,所以我会这样做:

#Get content of input file 
$FileIn = Get-Content C:\Path\To\File.txt 
#Start array for output with header record 
[array]$FileOut += 'DD/MM' 
#Loop 12 times, once for each month 
ForEach($Month in (1..12)){ 
    #Split the relevant line, and for each entry add a line to the output file 
    If([string]::IsNullOrEmpty($FileIn[$Month])){Continue} 
    $FileIn[$Month].Split(',') | ForEach{ 
        $FileOut += '{0}/{1}' -f $_, $Month 
    } 
} 
#Output the new file 
$FileOut | Set-Content C:\Path\To\NewFile.txt 

编辑:我修复了 2 个问题。我有 [1..2],它应该是 (1..12),并使用 $_ 引用而不是 $Month(无论如何应该工作,但是这是不好的形式恕我直言)。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!