Board logo

标题: [文本处理] 批处理怎样合并大批量的文本文件? [打印本页]

作者: necnec1    时间: 2012-4-5 21:47     标题: 批处理怎样合并大批量的文本文件?

公司,J,否
2012-04-30,,000000,EC12040072
任月,崔宁,2012-04-04
用户,发票
01,AB01,8--15,,009968,后移
02,AB02,8--20,,009978,后移
03,AB02,8--05,,009920,后移
50
性质,费用
利率,最后付款期
空行


我有10多万个文本文件  每个文本文件大致如上   文本为GB2312

前4行合并成一行  倒数后4行合并成一行   然后把2组合并的行 依次添加到01 02 03内容的后面    行与行合并请用逗号分隔

请注意 前4行和倒数4行 行数固定   中间的 01 02 03并不是固定的   有的文本只有01一行  而有的文本从01 02 03  一直到5000都有
最后的结果如下
01,AB01,8--15,,009968,后移,公司,J,否,2012-04-30,,000000,EC12040072,任月,崔宁,2012-04-04,用户,发票,50,性质,费用,利率,最后付款期,空行
02,AB02,8--20,,009978,后移,公司,J,否,2012-04-30,,000000,EC12040072,任月,崔宁,2012-04-04,用户,发票,50,性质,费用,利率,最后付款期,空行
03,AB02,8--05,,009920,后移,公司,J,否,2012-04-30,,000000,EC12040072,任月,崔宁,2012-04-04,用户,发票,50,性质,费用,利率,最后付款期,空行

请会的朋友帮帮忙 谢谢~
作者: gawk    时间: 2012-4-6 13:49

文件行数固定只有11行吗?
作者: necnec1    时间: 2012-4-6 14:04

回楼上的  前4行和倒数后4行是固定的   中间的 01 02 03并不是固定的   有的文本只有01一行  而有的文本从01 02 03  一直到5000都有 一行一行的类推
01
作者: apang    时间: 2012-4-6 19:21

偶滴神,10多万个文件,一想就冒冷汗。。。
作者: lvsehuaxue    时间: 2012-4-9 17:27

  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (*.txt) do (
  3.    for /f "tokens=1* delims=:" %%i in ('findstr /n .* %%a') do set str=%%i
  4.    for /f "delims=" %%i in (%%a) do (
  5.       set /a n+=1
  6.       set /a n1=!str!-4
  7.       if !n! leq 4 set var=!var!%%i,
  8.       if !n! gtr !n1! set var=!var!%%i,
  9.    )   
  10.    set var=!var:~0,-1!
  11.    (for /f "delims=" %%i in (%%a) do (
  12.    set /a m+=1
  13.    if !m! gtr 4 if !m! leq !n1! echo %%i,!var!
  14.    ))>$
  15.    move $ %%a
  16.    set n=
  17.    set m=
  18.    set str=
  19.    set var=
  20. )
复制代码

作者: apang    时间: 2012-4-9 19:11

本帖最后由 apang 于 2012-4-9 19:29 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%i in (*.txt) do (
  3.   set n=0
  4.   set str=
  5.   for /f "delims=" %%a in ('type "%%i"') do (
  6.     set/a n+=1
  7.     set "A!n!=%%a"
  8.   )
  9.   set/a m1=!n!-3
  10.   set/a m2=!n!-4
  11.   for /l %%a in (1 1 4) do set "str=!str!,!A%%a!"
  12.   for /l %%a in (!m1! 1 !n!) do set "str=!str!,!A%%a!"
  13.   (for /l %%a in (5 1 !m2!) do (
  14.      echo;!A%%a!!str!
  15.   ))>"%%i"
  16. )
复制代码





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