【发布时间】:2015-11-20 11:21:25
【问题描述】:
我想编写一个程序来打开一个文件,搜索一个指定的字符串并用另一个字符串替换这个字符串。 我的想法是一次读取 16 个字节的文件(我的字符串是 16 个字节),检查它是否与指定的匹配。如果是,则将文件指针向后移动 16 字节,将 16 字节替换为空格,再次将文件指针向后移动 16 字节以用新字符串填充这 16 字节 但它不能正常工作。谁能帮我解决这个问题?
这是我正在接受输入并尝试用以前的输入替换的过程。
edit1 proc
pushf
push ax
push bx
push cx
push dx
push di
mov ah, 42h
mov al, 1
mov cx, -1
mov dx, -18
int 21h
mov ah, 40h
mov cx, 18
mov dx, offset space1
int 21h
mov ah, 42h
mov al, 1
mov cx, -1
mov dx, -18
int 21h
number_input1: ;taking input string with which I want to replace
mov ah, 01h
lea di, number1
cld
number_loop1:
int 21h
cmp al, 0dh
je write1
stosb
jmp number_loop1
write1:
mov ah, 40h
mov cx, 18
lea dx, number1
int 21h
pop di
pop dx
pop cx
pop bx
pop ax
popf
ret
edit1 endp
【问题讨论】:
-
如果您希望人们帮助展示您的代码
-
无需将空格写入磁盘,然后再用您的字符串覆盖。只需编写字符串本身。如果这样做是因为字符串可能最多 16字节长,并且您希望确保完全删除旧字符串,只需在内存中使用一个 16 字节缓冲区,用空格填充它,复制您的字符串,然后将缓冲区写入磁盘一次。我意识到这并不能回答你的问题。此外,“不能正常工作”是对问题的一个非常糟糕的描述。您确实需要描述预期和观察到的内容 - 我们看不到您的屏幕!
-
在一个文件中,会有一个名字(16字节),联系电话(16字节)和换行(2字节:0ah,0dh)。每次我想编辑一个数字时,它都会读取 34 个字节并检查前 16 个字节是否与给定名称匹配。如果匹配,则将对应的联系人号码替换为新的联系人号码。但是运行代码后,emu8086中的文件中写入了“A.txt”之类的文件名,即使在masm中也会在控制台中生成模棱两可的字符。
-
但它不能正常工作。你能解释一下具体是什么不工作吗?在您随后的评论中,它也有点不清楚(我不确定 它在控制台中生成模棱两可的字符 是什么意思)。正如@Fifoernik 在他的回答中提到的那样,您还没有为文件 IO 设置文件句柄。但也许你在打开之后通过
bx将它传递给函数?目前还不清楚。bx会被一些int 21h调用覆盖,所以你需要注意这一点。 -
我已经在 bx 寄存器中传递了句柄,但问题还没有解决。就像我输入:Hello 12345 然后想用 45678 替换那个数字,在文件中写成“Hello 45678 H”。 (不带双引号)
标签: assembly