aardio 文档

textkit.ansi:默认 ANSI 文件编辑

textkit.ansi 操作的是文件,不是内存文本。适用于已确认使用系统默认 ANSI 的 .bat、.cmd、VB6 .bas / .cls / .frm 等遗留文本文件,主要供 aardio Autos 按需调用。

四个文件入口

所有入口只接受一个参数表,且必须包含 path;成功和失败都返回结果表,首先检查 ok。

入口 用途 参数
read 有界读取,给 AI 查看、定位 path, startLine, lineCount, maxBytes, lineNumbers
patch 精确 SEARCH/REPLACE 补丁 path, patches, backup, dryRun, previewMaxBytes
edit 行、锚点、区间及明确批量替换 path 加现有 edit_text_file 的编辑字段;不接受 compile
save 新建或明确全文覆盖 path, content, backup, dryRun

未知参数会被拒绝,不接受 codepage、encoding、compile。不自动运行 .bat 或编译 VB6 源码。

读取文件

import textkit.ansi;
return textkit.ansi.read({
    path = "/legacy/build.bat";
    startLine = 1;
    lineCount = 80
});

默认 startLine=1、lineCount=120、maxBytes=20000、lineNumbers=true。

精确补丁

import textkit.ansi;
var patches = "<<<<<<< SEARCH
echo 编译开始
=======
echo 开始构建
>>>>>>> REPLACE";

return textkit.ansi.patch({
    path = "/legacy/build.bat";
    patches = patches;
    dryRun = true
});

确认预览后,移除 dryRun 或设为 false 再提交。

与 patch_text_file 相同:

结构化编辑

import textkit.ansi;
return textkit.ansi.edit({
    path = "/legacy/Module1.bas";
    operation = "replace";
    oldText = "旧提示";
    newText = "新提示";
    expectedCount = 2
});

与 edit_text_file 对齐的操作字段:

operation 定位字段 写入字段
replace oldText newText
insertBefore / insertAfter anchor newText
replaceBetween beginAnchor, endAnchor newText
deleteBetween beginAnchor, endAnchor 不传 newText
replaceLines startLine,可选 endLine, expectedOldText newText

新建或全文覆盖

import textkit.ansi;
return textkit.ansi.save({
    path = "/legacy/build.bat";
    content = '@echo off\r\necho 开始编译\r\nexit /b 0\r\n'
});

save 不追加、不自动建父目录、不添加 BOM、不改变换行。创建批处理文件时建议显式用 \r\n(aardio 中控制字符写在单引号内)。空字符串表示创建空文件或清空已有文件。

已有源码的局部修改优先用 patch/edit,不要用全文覆盖代替精确编辑。

返回结果与安全边界

写接口常见字段:

patch/edit 的 previewMaxBytes 默认 1024,范围 0~4096,0 禁止文本回显。预算按 UTF-8 计,只限制预览及诊断,不限制实际编辑数量。诊断候选仅供定位,不能用于模糊写入。

文件提交规则:

  1. backup 默认 true;备份名称为 <path>.ansi.bak.<时间戳>.<随机后缀>,不会沿用 Autos 的 .aa.bak.* 名称。
  2. dryRun 不产生备份或暂存文件;无字节变化不写入。patch/edit 无文本变化时直接保留原始字节,不重复转码回写。
  3. 同目录独占创建暂存文件,写入、刷新并校验后再提交;不先截断原文件。
  4. 提交前复查原文件,变化则取消。这不是跨进程锁,复查与替换之间仍有很短的竞争窗口;不承诺多文件事务或断电持久性。
  5. 已有文件用 ReplaceFileW 替换,新文件用不覆盖现有目标的移动提交。backup=false 在提交期间仍保留恢复原件,成功后才删除;删不掉的备份仍通过 backupPath 返回。
  6. 特殊提交故障可能返回 recoveryRequired、backupPath、stagedPath。此时停止继续编辑,先检查和恢复,不要盲目重试。

备份是原始字节。可用 io.copy(backupPath, targetPath) 原样恢复,不要让 UTF-8 文本编辑/回滚工具读取 ANSI 备份。恢复前自行确认目标是否已有新修改。

本库拒绝含 NUL 的文件和写入内容,不处理 VB6 .frx 等二进制资源。对于有效默认 ANSI 文本,编辑保留未修改部分的文本与换行;对于异常字节或特殊编码映射,不承诺整份转码后的逐字节可逆性。

Markdown 格式