标题: [文本处理] 【已解决】如何将TXT文本内的多个连续的空格替换成一个空格 [打印本页]
作者: f0229f0229 时间: 2018-3-15 14:07 标题: 【已解决】如何将TXT文本内的多个连续的空格替换成一个空格
我原来的TXT文件内的数字都是用一个空格间隔开的,6-8列不定,最少6列,最多8列,行数不定,用“分列”导入Excel表格后,出现A列有空格,以及数字被分开,如42 43 44导入到表格后会出现4 24 34 4这种情况,希望各位大声能给个BAT批处理程序,在原文本文件内处理后,不生成新文件,使批处理后的文本文件能按要求导入到表格内,谢谢了
作者: yhcfsr 时间: 2018-3-15 18:02
感觉很乱,不明所以。要么发来源文件,不方便公开源文件的话,加好友私聊。
作者: f0229f0229 时间: 2018-3-15 20:47
回复 2# yhcfsr
第一次发帖,见谅,我选了一些例子,如果这些能用,其余的就都可以用了,麻烦大神给解决了,谢谢
作者: yhcfsr 时间: 2018-3-15 22:44
本帖最后由 yhcfsr 于 2018-3-16 06:36 编辑
回复 3# f0229f0229 - @echo off
- for /f "delims=" %%a in ('dir /a-d/s/b *.txt') do (
- (for /f "tokens=* delims= " %%i in ('type "%%a"') do echo %%i)>temp.txt
- move /y "temp.txt" "%%a"
- )
复制代码
这个只是去掉第一列前的空格而已。下面的方法将空格转换为制表符,不用再去EXCEL中分列转换,但限制性很强,适合数字之间最多只有两个空格的情况,否则就要修改代码。
总之用BAT限制多,用powershell的话就能写出通用性很好的脚本。- @echo off
- for /f "delims=" %%a in ('dir /a-d/s/b *.txt') do (
- (for /f "tokens=* delims= " %%i in ('type "%%a"') do echo %%i)>temp.txt
- (for /f "delims=" %%w in ('type temp.txt') do (
- set "str=%%w"
- setlocal enabledelayedexpansion
- set "str=!str: = !"&&set "str=!str: = !"
- echo !str!
- endlocal
- ))>"%%a"
- del /f /q temp.txt
- )
复制代码
POWERSHELL(推荐)- $ScDir="D:\test folder"; #源目录
- Get-ChildItem -Path $ScDir -Recurse|ForEach-Object{
- $content=Get-Content -Path $_.FullName;$str=$null;
- foreach($line in $content) {
- $str+=($line.Trim()|ForEach-Object{$_ -Replace '\s{1,}',"`t"})+"`r`n";
- }
- Out-File -FilePath $_.FullName -InputObject $str;
- }
复制代码
作者: WHY 时间: 2018-3-16 10:10
直接保存到 CSV 文件不可以吗?像这样:- @echo off
- setlocal enabledelayedexpansion
- (for /f "delims=" %%i in (1.txt) do (
- set "s="
- for %%j in (%%i) do set "s=!s!%%j,"
- echo;!s!
- ))>1.csv
- pause
复制代码
如果一定要在原文件上修改再导入Excel,那这样:- @echo off
- (for /f "tokens=*" %%i in (1.txt) do echo;%%i)>tmp.$
- move tmp.$ 1.txt
复制代码
作者: f0229f0229 时间: 2018-3-18 10:36
回复 4# yhcfsr
你好,谢谢你的帮助,第一个和第二个例程序我都可以用,通过你的启发,我再想能否在第一个例程序里再添加一段程序,就是将文本文件中所有的双空格替换为单空格,这样就完全达到我的目的了,我在实际使用中已实现这一功能,但是不知道用批处理语言如何写,请大神指教,谢谢
作者: f0229f0229 时间: 2018-3-18 10:41
回复 5# WHY
你好,谢谢你的帮助,你提供的第一个程序运行后只在表格里显示
@echo off
(for /f "tokens=*" %%i in (1.txt) do echo;%%i)>tmp.$
move tmp.$ 1.txt
再没有其他内容。
第二段程序运行后,在新生成的1.TXT文件中没有任何内容
作者: yhcfsr 时间: 2018-3-18 11:54
回复 6# f0229f0229 - @echo off
- for /f "delims=" %%a in ('dir /a-d/s/b *.txt') do (
- (for /f "tokens=* delims= " %%i in ('type "%%a"') do (
- set "var=%%i"
- setlocal enabledelayedexpansion
- set "var=!var: = !"
- echo !var!
- endlocal
- ))>temp.txt
- move /y "temp.txt" "%%a"
- )
复制代码
作者: f0229f0229 时间: 2018-3-18 13:06
回复 8# yhcfsr
完美,谢谢大神,学习了
作者: WHY 时间: 2018-3-18 20:46
回复 7# f0229f0229
这么简单的脚本,看不懂(不会用)不是你的错,要是胡说八道那就是你不对了!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |