Board logo

标题: [文本处理] [已解决]批处理代码修改-指定字符串占位长度 [打印本页]

作者: meiszp    时间: 2024-5-25 19:47     标题: [已解决]批处理代码修改-指定字符串占位长度

本帖最后由 meiszp 于 2024-7-10 08:32 编辑

下面代码是从txt文件提取数据,提取第4行(不算第2行空行)文字输出到out.txt的第一列,由于每个txt的第4行字符串长度不同,小于12个字符,为了统一输出格式,要求长度为12个字符,不足空格补齐。

txt文件的前几行
  1. SDDD BLDE Co.                                                            
  2.   
  3. ***********************************************************************
  4.     ANABDCD OF LAEDDV SEADDVLS      
  5.     101                                                                      
  6. ***********************************************************************
  7.   
  8.   ***********************************************
复制代码
现在输出的格式,列不对齐
101         0.135202E+06        0.497862E+05        0.475893E+02        -.292984E+02        -.193619E-01        0.974525E-02
102-111         0.460730E+05        -.286256E+05        0.751879E+02        0.574422E+02        0.108112E-01        -.289517E-01
201         0.232319E+06        0.828039E+05        0.854119E+02        -.519552E+02        -.386417E-01        0.163690E-01
202-34         0.661483E+05        -.445798E+05        0.111548E+03        0.100785E+03        0.273654E-01        -.449156E-01

希望输出的格式如下,列对齐
101                 0.135202E+06        0.497862E+05        0.475893E+02        -.292984E+02        -.193619E-01        0.974525E-02
102-111          0.460730E+05        -.286256E+05        0.751879E+02        0.574422E+02        0.108112E-01        -.289517E-01
201                 0.232319E+06        0.828039E+05        0.854119E+02        -.519552E+02        -.386417E-01        0.163690E-01
202-34            0.661483E+05        -.445798E+05        0.111548E+03        0.100785E+03        0.273654E-01        -.449156E-01
  1. @echo off
  2. (for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  3.     setlocal enabledelayedexpansion
  4.     for /f "tokens=1-3,5,11" %%a in ('type "%%i"') do (
  5.         set /a n+=1
  6.         if !n! equ 4 (
  7.             set str=%%a         ::提取第4行
  8.         ) else if "%%a %%b %%c"=="inclu ma coef" (
  9.             set m=0
  10.         ) else if defined m (
  11.             set /a m+=1
  12.             set str=!str! %%d %%e
  13.             if !m! equ 3 (
  14.                 echo,!str!
  15.                 set m=
  16.             )
  17.         )
  18.     )
  19.     endlocal
  20. ))>out.txt
  21. pause
复制代码

作者: newswan    时间: 2024-5-25 20:43

本帖最后由 newswan 于 2024-5-25 20:54 编辑

@echo off
(for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
    setlocal enabledelayedexpansion
    for /f "tokens=1-3,5,11" %%a in ('type "%%i"') do (
        set /a n+=1
        if !n! equ 4 (
set "str=%%a            "
set str=!str:~0,12!
        ) else if "%%a %%b %%c"=="inclu ma coef" (
            set m=0
        ) else if defined m (
            set /a m+=1
            set str=!str!        %%d        %%e
            if !m! equ 3 (
                echo,!str!
                set m=
            )
        )
    )
    endlocal
))>out.txt
pause
作者: Five66    时间: 2024-5-25 22:49

将空格换成2个tab , 文本编辑器打开呈现时会自动制表的
作者: hfxiang    时间: 2024-5-26 09:23

回复 1# meiszp

用第3方工具gawk(http://bcn.bathome.net/tool/4.1.0/gawk.exe)的实现方法如下:
  1. @echo off
  2. rem 建议保存为ANSI编码
  3. del "out.txt"
  4. gawk "FNR==5{for(i=1;i<=NF;i++){printf\"%%-20s\",$i}print\"\"}" "*.txt">"out.txt"
复制代码





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