按照版主要求,现将详细需求整理在此:
现有16G的文本文件,有130个字段,需要拆分成若干文件。
拆分规则: 按照 第117个字段的前三位命名并拆分。
我已研究出一个半成品代码,代码如下:
@echo off
sed.exe -f sed.txt aaa.txt > temp.txt
for /f "tokens=1,2* delims=|" %%a in (temp.txt) do (
for /f "tokens=25* delims=|" %%d in ("%%c") do (
for /f "tokens=25* delims=|" %%f in ("%%e") do (
for /f "tokens=25* delims=|" %%h in ("%%g") do (
for /f "tokens=25* delims=|" %%j in ("%%i") do (
for /f "tokens=15 delims=|" %%l in ("%%k") do (
set "str=%%l"
setlocal enabledelayedexpansion
for %%z in (110 210 310) do (
if "!str:~,3!"=="%%z" (
>>%%z.txt echo %%a^|%%b^|%%c
)
)
endlocal
)
)
)
)
)
)
但是该代码有个缺陷,%%z 并不止上述“110 210 310”三个,因此不能如此枚举出来,而是能否直接用第117个字段的前三位来命名。
同时目前还发现另外一个问题:
文本文件中,有字段值为空,即两个管道符在一起(如:||),如此,FOR会认为所指定的字段并不在117位,程序默认空字段值不能赋值给一个变量,导致锁定第117个字段不准,因此我使用了个蠢办法,利用SED.EXE做一个全文本替换,将管道符“|”替换成空格+管道符(如:“ |”),如此就能锁定第117个字段,但是这样就会多一次I/O读写,效率大大降低。
论坛高手如云,且不吝赐教,感激不尽!!
现有16G的文本文件,有130个字段,需要拆分成若干文件。
拆分规则: 按照 第117个字段的前三位命名并拆分。
我已研究出一个半成品代码,代码如下:
@echo off
sed.exe -f sed.txt aaa.txt > temp.txt
for /f "tokens=1,2* delims=|" %%a in (temp.txt) do (
for /f "tokens=25* delims=|" %%d in ("%%c") do (
for /f "tokens=25* delims=|" %%f in ("%%e") do (
for /f "tokens=25* delims=|" %%h in ("%%g") do (
for /f "tokens=25* delims=|" %%j in ("%%i") do (
for /f "tokens=15 delims=|" %%l in ("%%k") do (
set "str=%%l"
setlocal enabledelayedexpansion
for %%z in (110 210 310) do (
if "!str:~,3!"=="%%z" (
>>%%z.txt echo %%a^|%%b^|%%c
)
)
endlocal
)
)
)
)
)
)
但是该代码有个缺陷,%%z 并不止上述“110 210 310”三个,因此不能如此枚举出来,而是能否直接用第117个字段的前三位来命名。
同时目前还发现另外一个问题:
文本文件中,有字段值为空,即两个管道符在一起(如:||),如此,FOR会认为所指定的字段并不在117位,程序默认空字段值不能赋值给一个变量,导致锁定第117个字段不准,因此我使用了个蠢办法,利用SED.EXE做一个全文本替换,将管道符“|”替换成空格+管道符(如:“ |”),如此就能锁定第117个字段,但是这样就会多一次I/O读写,效率大大降低。
论坛高手如云,且不吝赐教,感激不尽!!
