Board logo

标题: [文本处理] 【已解决】如何将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
  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d/s/b *.txt') do (
  3. (for /f "tokens=* delims= " %%i in ('type "%%a"') do echo %%i)>temp.txt
  4. move /y "temp.txt" "%%a"
  5. )
复制代码
这个只是去掉第一列前的空格而已。下面的方法将空格转换为制表符,不用再去EXCEL中分列转换,但限制性很强,适合数字之间最多只有两个空格的情况,否则就要修改代码。
总之用BAT限制多,用powershell的话就能写出通用性很好的脚本。
  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d/s/b *.txt') do (
  3. (for /f "tokens=* delims= " %%i in ('type "%%a"') do echo %%i)>temp.txt
  4. (for /f "delims=" %%w in ('type temp.txt') do (
  5. set "str=%%w"
  6. setlocal enabledelayedexpansion
  7. set "str=!str:  = !"&&set "str=!str: = !"
  8. echo !str!
  9. endlocal
  10. ))>"%%a"
  11. del /f /q temp.txt
  12. )
复制代码
POWERSHELL(推荐)
  1. $ScDir="D:\test folder"; #源目录
  2. Get-ChildItem -Path $ScDir -Recurse|ForEach-Object{
  3.     $content=Get-Content -Path $_.FullName;$str=$null;
  4.     foreach($line in $content) {
  5.         $str+=($line.Trim()|ForEach-Object{$_ -Replace '\s{1,}',"`t"})+"`r`n";
  6.     }
  7.   Out-File -FilePath $_.FullName -InputObject $str;
  8. }
复制代码

作者: WHY    时间: 2018-3-16 10:10

直接保存到 CSV 文件不可以吗?像这样:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%i in (1.txt) do (
  4.     set "s="
  5.     for %%j in (%%i) do set "s=!s!%%j,"
  6.     echo;!s!
  7. ))>1.csv
  8. pause
复制代码
如果一定要在原文件上修改再导入Excel,那这样:
  1. @echo off
  2. (for /f "tokens=*" %%i in (1.txt) do echo;%%i)>tmp.$
  3. 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
  1. @echo off
  2. for /f "delims=" %%a in ('dir /a-d/s/b *.txt') do (
  3. (for /f "tokens=* delims= " %%i in ('type "%%a"') do (
  4. set "var=%%i"
  5. setlocal enabledelayedexpansion
  6. set "var=!var:  = !"
  7. echo !var!
  8. endlocal
  9. ))>temp.txt
  10. move /y "temp.txt" "%%a"
  11. )
复制代码

作者: f0229f0229    时间: 2018-3-18 13:06

回复 8# yhcfsr


    完美,谢谢大神,学习了
作者: WHY    时间: 2018-3-18 20:46

回复 7# f0229f0229


    这么简单的脚本,看不懂(不会用)不是你的错,要是胡说八道那就是你不对了!




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