我有一个包含超过32,000行评论机器代码的.txt文档。它看起来像这样:
; Display menu window
C0/000E: E220 SEP #$20 (Set 8-bit accumulator)
C0/0010: C210 REP #$10 (Set 16-bit X and Y)
为了编译目的,我需要将注释转换如下:
; Display menu window
C0/000E: E220 SEP #$20 ; Set 8-bit accumulator
C0/0010: C210 REP #$10 ; Set 16-bit X and Y
具体来说,这意味着:
请注意,此主板会将标签替换为多个空格,因此左括号似乎不是第34个字符。
理想情况下,我想要一个批处理脚本,它允许我拖放文档(例如,abc.txt),并自动获取不同的文件(例如,abc2.txt)。但这不是强制性的。
编辑:必须强调的是,代码本身可以包含括号,因此不能选择简单的查找和替换。例如:
C0/0000: 7C0600 JMP ($0006,X) (Display window X)
答案 0 :(得分:1)
第一部分是关于提取丢弃到你的蝙蝠的文件,生成输出名称并篡改目标文件。
在代码的第二部分中,我们逐个检查您的标准,并且只有当它们都适合当前行时才执行替换。
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET source=%1
FOR /F "tokens=1 delims=." %%t IN ("%source%") DO SET target=%%t
SET target=!target!2.txt
TYPE NUL>!target!
FOR /F "tokens=1* delims=]" %%j in ('type "%source%" ^| find /V /N ""') DO (
IF "%%k"=="" (
ECHO.>>!target!
) ELSE (
SET currentLine=%%k
IF "!currentLine:~0,2!"=="C0" (
IF "!currentLine:~34,1!"=="(" (
SET left=!currentLine:~0,33!
SET right=!currentLine:~34!
ECHO !right!
SET right=!right:(=; !
SET right=!right:^)=!
ECHO !right!
SET currentLine=!left!!right!
)
)
ECHO !currentline!>>!target!
)
)
正如您所提到的,解释制表符和空格可能存在问题。在我的情况下(我已经从你的帖子中复制了你的输入文件)我不得不使用这个:
...
IF "!currentLine:~39,1!"=="(" (
SET left=!currentLine:~0,38!
SET right=!currentLine:~39!
...