PowerShell文本解析问题:提取学生数据并移除首尾换页符
PowerShell代码修正方案
修正后的代码如下:
# 读取整个文件内容,保留所有字符(包括换页符\f) $rawContent = Get-Content "C:\EDICleanUp\1_ToBeProcessed\edi.txt" -Raw $Transcript = "_EDI_TRANSCRIPT_" $Tdate = Get-Date -Format yyyy-MM-dd $ProcessedFilePath = "C:\EDICleanUp\2_Processed" $Complete = "C:\EDICleanUp\3_Original" $ToBeProcessed = "C:\EDICleanUp\1_ToBeProcessed\edi.txt" # 按"END OF TRANSCRIPT"行+换页符分割内容,排除该换页符 $transcripts = $rawContent -split '\*{10} END OF TRANSCRIPT \*{10}\f', 0, 'Multiline' $fileIndex = 1 foreach ($transcript in $transcripts) { # 移除当前成绩单首尾的换页符 $cleanedTranscript = $transcript.Trim("`f") # 跳过空内容(避免分割后产生空文件) if ([string]::IsNullOrWhiteSpace($cleanedTranscript)) { continue } $outputPath = Join-Path $ProcessedFilePath "$Tdate$Transcript$fileIndex.txt" # 写入文件,保留原始换行和剩余换页符 Set-Content -Path $outputPath -Value $cleanedTranscript -NoNewline $fileIndex++ } # 移动原文件到完成目录 Move-Item -Path $ToBeProcessed -Destination $Complete
关键改动说明
- 使用
Get-Content -Raw读取整个文件为单个字符串,确保所有字符(包括\f)的完整性,避免按行拆分导致换页符处理混乱 - 正则分割时直接匹配
********** END OF TRANSCRIPT **********\f,将其作为分隔符,自动排除该换页符,不会被写入下一个文件 - 用
Trim("f")`移除每个成绩单首尾的换页符,保留内容内部的换页符 - 使用
Set-Content -NoNewline写入文件,避免额外添加换行符破坏原始格式 - 增加空内容判断,防止生成空文件
内容的提问来源于stack exchange,提问作者Wayne W. Van Ellis
相关产品推荐
相关产品推荐

