[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 yhcfsr 于 2018-6-8 23:24 编辑

最好有数据样本,原数据列之间的分隔符是空格??而字段二内有空格,所以不能用空格分离??
思路:规律是,字段都是对齐的,所以通过字符串截取,可以获取字段内容。当然这种方法,字段尾的空格也会截进来,再想办法去掉尾巴的空格就行。
powershell能够轻松实现,BAT会麻烦些。
QQ 33892006

TOP

本帖最后由 yhcfsr 于 2018-6-8 23:36 编辑

回复 3# shootman2

对,我就是这个意思.
因为同一个字段,有效内容长度不一样,不能用替换空格的方法来实现分割.
QQ 33892006

TOP

回复 5# shootman2
可以,只不过去掉尾巴的空格,要从字段尾逐字判断,可能会稍微影响效率.
QQ 33892006

TOP

本帖最后由 yhcfsr 于 2018-6-9 14:47 编辑

哈哈,我发两个脚本你看看。注意备份源文件,POWERSHELL的修改是直接覆盖源文件的。
输出的文件用EXCEL打开,可以直观查看6列数据。
POWERSHELL强大的正则,不需要截取去尾这些操作。
  1. $sf='D:\test\data.txt';
  2. $content=gc -LiteralPath $sf;
  3. $output=$null;
  4. foreach($line in $content){
  5.    
  6.     $output+=($line -replace '(\d+)\s*.*','$1')+"`t";
  7.     $output+=($line -replace '.*(\(USA\).*NA).*','$1')+"`t";
  8.     $output+=($line -replace '.*NA\s*(\d+)\s*.*','$1')+"`t";
  9.     $output+=($line -replace '.*NA\s*\d+\s*(\d+)\s*.*','$1')+"`t";
  10.     $output+=($line -replace '.*NA\s*\d+\s*\d+\s*(\d+)\s*.*','$1')+"`t";
  11.     $output+=($line -replace '.*\s*(\d+)$','$1')+"`r`n";
  12. }
  13. $output>$sf;
复制代码
BAT
字符串截取的数值设置,需要根据源数据具体情况,自行调试。
  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in ('type data.txt') do (
  3.         set "str=%%a"
  4.         
  5.         set "colum1=!str:~,12!"
  6.         call:TrimEnd "!colum1!" colum1 " "
  7.         
  8.         set "colum2=!str:~12,24!"
  9.         call:TrimEnd "!colum2!" colum2 " "
  10.         
  11.         set "colum3=!str:~36,3!"
  12.         call:TrimEnd "!colum3!" colum3 " "
  13.         
  14.         set "colum4=!str:~39,11!"
  15.         call:TrimEnd "!colum4!" colum4 " "
  16.         
  17.         set "colum5=!str:~50,2!"
  18.         call:TrimEnd "!colum5!" colum5 " "
  19.         
  20.         set "colum6=!str:~52!"
  21.         call:TrimEnd "!colum6!" str " "
  22.         call echo;!colum1!        !colum2!        !colum3!        !colum4!        !colum5!        !colum6!
  23. ))>out.txt
  24. endlocal&pause&exit
  25. :TrimEnd (源字符串,输出字符串,要删除的尾字符)去尾
  26. setlocal
  27. if "%~1" neq "" (set "var=%~1") else endlocal&goto:eof
  28. :lp
  29. if "%var:~-1%" equ "%~3" set "var=%var:~,-1%"&goto:lp
  30. endlocal&set "%2=%var%"&goto:eof
复制代码
QQ 33892006

TOP

返回列表