Board logo

标题: [文本处理] 【已解决】如何在多文本中,在指定字符串前删除换行符? [打印本页]

作者: 屡败屡战    时间: 2017-12-24 20:58     标题: 【已解决】如何在多文本中,在指定字符串前删除换行符?

本帖最后由 屡败屡战 于 2018-1-28 09:09 编辑

我处理文本文件,有问题求助,在大量的文本中,如何在指定字符串(例如“¥”)之前删除换行符,使指定字符“¥”所在的上、下行,合并戓一行?
举例:
某某文本文件(其内容是)

444444
777777
555555
¥888888
3333333
77778955

我想要的效果:

444444
777777
555555¥888888
3333333
77778955


我要处理的是大量的文本文件,指定字符是“¥”,望大神们给些启示!!
作者: yhcfsr    时间: 2017-12-25 03:30

本帖最后由 yhcfsr 于 2017-12-25 03:32 编辑

bat我搞不定,只能去用powershell。对于我这样的新手来说,powershell比bat要友好的多
  1. $SourFile="D:\test3\temp.txt" #设置源文件
  2. $SymbolStr="¥"               #设置标志
  3. $OutFile="D:\temp.txt"        #设置输出文件
  4. $fso=Get-Content -Path $SourFile
  5. $n=0
  6. foreach($line in $fso)
  7. {
  8.     if(($n+1) -lt $fso.Count){
  9.         if($fso[$n+1].Contains($SymbolStr)){$line|Out-File -Append -NoNewline -FilePath $OutFile} else{$line|Out-File -Append -FilePath $OutFile}
  10.     }else {$line|Out-File -Append -FilePath $OutFile}
  11.     $n+=1
  12. }
复制代码

作者: 屡败屡战    时间: 2017-12-25 07:00

本帖最后由 屡败屡战 于 2017-12-25 09:38 编辑

请不要误会,我是指多文本(*.txt),不是指单文本。
另外,请详解下powershell下用法,我是win7 32位的,如何使用powershell脚本?
有什么办法吗?请帮帮忙!!!
作者: WHY    时间: 2017-12-25 11:24

  1. $arr = dir *.txt | ?{$_ -is [IO.FileInfo]};
  2. $arr | ForEach {
  3.     $str = [IO.File]::ReadAllText($_, [Text.Encoding]::Default);
  4.     $str -replace '[\r\n]+(¥)', '$1' > ($_.FullName + '.LOG')
  5. }
复制代码

作者: WHY    时间: 2017-12-25 11:24

本帖最后由 WHY 于 2017-12-26 22:55 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%i in (*.txt) do (
  4.         set "s1="
  5.         for /f "usebackq delims=" %%j in ("%%i") do (
  6.                 Rem 当前行赋值给s2
  7.                 set "s2=%%j"
  8.                 if not "!s2:~0,1!" == "¥" (
  9.                         if defined s1 (echo;!s1!)
  10.                         Rem 上一行赋值给s1
  11.                         set "s1=%%j"
  12.                 ) else (set "s1=!s1!%%j")
  13.         )
  14.         if defined s1 (echo;!s1!)
  15. ) > "%%i.LOG"
复制代码

作者: yhcfsr    时间: 2017-12-25 19:08

回复 4# WHY


    666,学习了
作者: yhcfsr    时间: 2017-12-25 21:10

本帖最后由 yhcfsr 于 2017-12-25 21:22 编辑
  1. $SourDir="D:\test4" #设置源目录
  2. $SymbolStr="¥"               #设置标志
  3. Get-ChildItem -Path $SourDir -Filter *.bk -Force -Recurse|Remove-Item
  4. $fso=(Get-ChildItem -Path $SourDir -Filter *.txt -Force -Recurse)
  5. foreach($file in $fso){
  6.    $TxtContent=Get-Content -Path $file.FullName
  7.    $n=0
  8.    $outfile=-join($file.FullName,".bk")
  9.    foreach($line in $TxtContent){
  10.     if(($n+1) -lt $TxtContent.Count)
  11.     {
  12.         if($TxtContent[$n+1].Contains($SymbolStr)){$line|Out-File -Append -NoNewline -FilePath $outfile} else{$line|Out-File -Append -FilePath $outfile}
  13.      }else {$line|Out-File -Append -FilePath $outfile}
  14.     $n+=1
  15.      }
  16.    move -Path $outfile -Destination $file.FullName -Force -WhatIf
  17. }
复制代码
说明:
1.操作对象:源目录所有txt文档
2.文档中含有标志符(如¥,¥¥,¥¥¥等形式),无论标志符在行中任何位置,都会并到上一行末尾,如果与您的目的不符,请慎用
3.默认生成与源文件同名的.bk文件,用记事本可打开查看,仔细确认如果实现了理想的效果,可将代码最后一行的 -WhatIf 删除,重新运行脚本即可对源文件实现修改。此步会修改源文件,且不可逆,谨慎操作。
4.脚本保存为.ps1格式,右键以powershell运行。如果以前没有对powershell安全策略进行过设置,默认禁止执行脚本,如果是这样,看第5点。
5.更改powershell安全策略的方法:管理员身份运行cmd(命令提示符),复制以下命令粘贴到提示符后回车
  1. powershell -c "Set-ExecutionPolicy Unrestricted"
复制代码
6.如果命令有误,到微软官网下载最新版powershell
作者: 屡败屡战    时间: 2017-12-26 12:41

本帖最后由 屡败屡战 于 2017-12-27 08:01 编辑

老师好:能否给个powershell的下载链接,或最好是种子文件,我的是Win7 64位版本
我曾下过powershell文件,但是系统提示无法安装,不知咋搞的?




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2