我想编写一个程序,它将打开一个文件,搜索指定的字符串并用另一个字符串替换该字符串。 我的想法是一次读取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
答案 0 :(得分:2)
所有DOS调用似乎都缺少BX参数 这应该掌握你打开的文件的句柄!
根据您的上一条评论,请考虑以下示例:
您的 number_loop1 输入循环获取这11个字符(然后返回):
Hello 12345
此后,无论输入的字符数(此处为11), write1 代码始终写入18个字节。这将不可避免地导致文件中的垃圾字节(此处为7)。
解决方案:
你在文件中写了18个空格,但你应该在 number1 指向的内存中写入18个空格。
答案 1 :(得分:0)
抱歉,我的例子可能并不完美表达实际情况。在文件中,当字符串初始化为空格时,它总是写入18个字节。 当我试图从当前位置向后移动时,首先我寻找当前文件指针位置,然后从文件的起始点向前移动到该位置。由于以前的方法是失败的,现在我已经尝试过这种方式并且它有效。 谢谢大家。