我需要一种方法,根据KB而不是行数将文件拆分成多个(甚至一半)。
我是高级EDI分析师,包装数据往往显示为一条长线。每个"解决方案"我根据行数找到分裂。我需要根据尺寸分割的东西。
最终目标是" Unwrap"这个数据,意味着每个细分都将在自己的行上。要做到这一点,我需要更改分隔符(因为有"特殊字符"作为分隔符)。
我确实有一个解决方案(见下文),但由于某种原因,这不适用于大于10 KB的文件。如果你对EDI有所了解,那就不是很大了。
我需要找到一个解决方案,将文件拆分成每个大约5KB的较小文件(然后我可以使用字符串替换并自己重新组合)。
有没有人知道如何通过一条巨大的线来实现这一目标?
(对不起,我必须删除我放在这里的代码仅作为示例,因为有人将此标记为重复但没有阅读。请在上面阅读并提供建议。)
答案 0 :(得分:0)
虽然您的描述很广泛,但有几点尚不清楚。有太多不相关的细节只是偏离了问题的核心点。如果行中的每个段由Function getlabel(ByVal day As DayOfWeek, ByVal row As Integer) As Label
Dim result As Label = Nothing
Select Case day
Case DayOfWeek.Sunday
Select Case row
Case 1
result = su1
Case 2
result = su2
Case 3
result = su3
Case 4
result = su4
Case 5
result = su5
Case 6
result = su6
End Select
'continue your cases.
End Select
Return result
End Function
分隔符分隔(您没有解释这一点,但是从示例代码中假设它)并且您希望根据特定的KB大小拆分文件(您没有指定了多少KB),然后一个段可以分成两个不同的文件。另外,我不明白如何用星号更改|
分隔符可能有助于解决问题。在多次阅读此问题后,我认为问题是这样的:
“将包含很长行(没有单个CR + LF对)的文件拆分为由
|
字符分隔的段,因此每个段都将在其自己的行上。”
下面的批处理文件是此问题的解决方案:
|
编辑:添加了JScript解决方案
正如其他人所提到的,您也可以使用基于JScript的解决方案,这是一种预装在XP上所有Windows版本中的标准编程语言。这样,解决方案非常简单,因为您只需要在批处理文件中插入以下两行:
@echo off
setlocal EnableDelayedExpansion
call :ProcessFile < input.txt > output.txt
goto :EOF
:ProcessFile
set "previous="
:nextChunk
rem Read the next 1023-bytes chunk
set /P "chunk="
if errorlevel 1 goto endOfFile
rem Break segment if previous one ends at a chunk limit
if "!chunk:~0,1!" equ "|" if defined previous (
echo !previous!
set "previous="
)
rem Extract each segment from the chunk and place it on its own line
set "last="
for /F "delims=" %%a in (^"!chunk:^|^=^
% This line separate segments by the given delimiter %
!^") do (
if defined last echo !last!
set "last=!previous!%%a"
set "previous="
)
set "previous=!last!"
goto nextChunk
:endOfFile
rem Show the last segment
if defined previous echo !previous!
exit /B
这是一种非常简单但功能强大的方法,您可以在其他类似的替换操作中使用它;只需阅读相应的documentation。
答案 1 :(得分:0)
您无法处理文件的原因&gt; 10k字节是因为批处理变量(和命令行)限制为~8191字节。
您正在以低效的方式攻击问题。而不是寻找一种方法将文件拆分成块以便您可以使用慢速批处理“解决方案”,而应该寻找一种工具,允许您直接使用大型文件,而无需分离,处理和重新组装。
正如其他人所说,PowerShell,JavaScript和VBS都是可以解决问题的优秀脚本语言,而且它们是Windows的原生语言。
如果您的文件长度都小于1千兆字节,那么我建议您尝试JREPL.BAT - a regex text processing utility。它是纯脚本(混合批处理/ JScript),可以在任何Windows机器上从XP开始本地运行 - 不需要第三方exe文件。可以从命令行通过jrepl /?
或jrepl /??
获取完整文档以获取分页帮助。
要解包文件,将|
翻译成*\r\n
(\ r是回车符,\ n是换行符):
jrepl "|" "*\r\n" /l /m /x /f "wrappedFileName" /o "unwrappedFileName"
包装文件(反向过程)
jrepl "*\r\n" "|" /l /m /x /f "unwrappedFileName" /o "wrappedFileName"
如果您将任一命令放在批处理脚本中,则必须使用call jrepl
而不是jrepl
。这是因为JREPL也是批处理脚本,因此除非您使用CALL,否则控件不会返回到您的脚本。