标题: [文本处理] 【已解决】如何在多文本中,在指定字符串前删除换行符? [打印本页]
作者: 屡败屡战 时间: 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要友好的多- $SourFile="D:\test3\temp.txt" #设置源文件
- $SymbolStr="¥" #设置标志
- $OutFile="D:\temp.txt" #设置输出文件
-
- $fso=Get-Content -Path $SourFile
- $n=0
- foreach($line in $fso)
- {
- if(($n+1) -lt $fso.Count){
- if($fso[$n+1].Contains($SymbolStr)){$line|Out-File -Append -NoNewline -FilePath $OutFile} else{$line|Out-File -Append -FilePath $OutFile}
- }else {$line|Out-File -Append -FilePath $OutFile}
- $n+=1
- }
复制代码
作者: 屡败屡战 时间: 2017-12-25 07:00
本帖最后由 屡败屡战 于 2017-12-25 09:38 编辑
请不要误会,我是指多文本(*.txt),不是指单文本。
另外,请详解下powershell下用法,我是win7 32位的,如何使用powershell脚本?
有什么办法吗?请帮帮忙!!!
作者: WHY 时间: 2017-12-25 11:24
- $arr = dir *.txt | ?{$_ -is [IO.FileInfo]};
- $arr | ForEach {
- $str = [IO.File]::ReadAllText($_, [Text.Encoding]::Default);
- $str -replace '[\r\n]+(¥)', '$1' > ($_.FullName + '.LOG')
- }
复制代码
作者: WHY 时间: 2017-12-25 11:24
本帖最后由 WHY 于 2017-12-26 22:55 编辑
- @echo off
- setlocal enabledelayedexpansion
- for %%i in (*.txt) do (
- set "s1="
- for /f "usebackq delims=" %%j in ("%%i") do (
- Rem 当前行赋值给s2
- set "s2=%%j"
- if not "!s2:~0,1!" == "¥" (
- if defined s1 (echo;!s1!)
- Rem 上一行赋值给s1
- set "s1=%%j"
- ) else (set "s1=!s1!%%j")
- )
- if defined s1 (echo;!s1!)
- ) > "%%i.LOG"
复制代码
作者: yhcfsr 时间: 2017-12-25 19:08
回复 4# WHY
666,学习了
作者: yhcfsr 时间: 2017-12-25 21:10
本帖最后由 yhcfsr 于 2017-12-25 21:22 编辑
- $SourDir="D:\test4" #设置源目录
- $SymbolStr="¥" #设置标志
-
- Get-ChildItem -Path $SourDir -Filter *.bk -Force -Recurse|Remove-Item
- $fso=(Get-ChildItem -Path $SourDir -Filter *.txt -Force -Recurse)
- foreach($file in $fso){
- $TxtContent=Get-Content -Path $file.FullName
- $n=0
- $outfile=-join($file.FullName,".bk")
- foreach($line in $TxtContent){
- if(($n+1) -lt $TxtContent.Count)
- {
- if($TxtContent[$n+1].Contains($SymbolStr)){$line|Out-File -Append -NoNewline -FilePath $outfile} else{$line|Out-File -Append -FilePath $outfile}
- }else {$line|Out-File -Append -FilePath $outfile}
- $n+=1
- }
- move -Path $outfile -Destination $file.FullName -Force -WhatIf
- }
复制代码
说明:
1.操作对象:源目录所有txt文档
2.文档中含有标志符(如¥,¥¥,¥¥¥等形式),无论标志符在行中任何位置,都会并到上一行末尾,如果与您的目的不符,请慎用
3.默认生成与源文件同名的.bk文件,用记事本可打开查看,仔细确认如果实现了理想的效果,可将代码最后一行的 -WhatIf 删除,重新运行脚本即可对源文件实现修改。此步会修改源文件,且不可逆,谨慎操作。
4.脚本保存为.ps1格式,右键以powershell运行。如果以前没有对powershell安全策略进行过设置,默认禁止执行脚本,如果是这样,看第5点。
5.更改powershell安全策略的方法:管理员身份运行cmd(命令提示符),复制以下命令粘贴到提示符后回车- powershell -c "Set-ExecutionPolicy Unrestricted"
复制代码
6.如果命令有误,到微软官网下载最新版powershell
作者: 屡败屡战 时间: 2017-12-26 12:41
本帖最后由 屡败屡战 于 2017-12-27 08:01 编辑
老师好:能否给个powershell的下载链接,或最好是种子文件,我的是Win7 64位版本
我曾下过powershell文件,但是系统提示无法安装,不知咋搞的?
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |