Hola
-danke für die vielen Tipps
Ich habe das Programm etwas umgeschrieben - beim kompilieren mit Tasm und dem Linken mit Tlink gibts es keine Fehlermeldungen.
Allerdings kann die Datei nicht geöffnet werden in der gesucht werden soll - woran kann das liegen?
die Datei(kap1.txt) in der ich suchen will liegt im selben Verzeichniss wie das Programm.
Also am Promt erscheint jetzt folgendes:
Geben sie das zu suchende Wort ein: der
In welcher Datei soll gesucht werden?: kap1.txt
Datei konnte nicht geoeffnet werden
Hier der Code dazu:
ZitatAlles anzeigen
.MODEL SMALL
.STACK 100h
.DATA
;
Msg1 DB 10,13,"Geben sie das zu suchende Wort ein: $"
Msg2 DB 10,13,"$"
Puffer STRUC ;Stuktur definieren
Max DB 50 ;Maximale Anzahl Zeichen
Anz DB ? ;Fkt gibt hier die Anz. der eingegebenen Zeichen rein
Txt DB 53 DUP (?) ;Hier der eigentliche Text
Puffer ENDS
BufStrc Puffer <> ;Speicherplatz fuer Puffer1!
;
Msg3 DB 10,13,"In welcher Datei soll gesucht werden?: $"
;
Puffer2 STRUC ;Stuktur definieren
Max DB 50 ;Maximale Anzahl Zeichen
Anz DB ? ;Fkt gibt hier die Anz. der eingegebenen Zeichen rein
Txt DB 53 DUP (?) ;Hier der eigentliche Text
Puffer2 ENDS
BufStrc2 Puffer2 <> ;Speicherplatz fuer Puffer2!
;
laenge equ $-offset BufStrc.Txt
showstring db " ",10d,13d,"$"
toogre db "String oefters als 9 mal gefunden",10d,13d,"$"
datfehler db "Datei konnte nicht geoeffnet werden",10d,13d,"$"
.CODE
mov ax, data
mov ds,ax
mov ah,09h
lea dx,Msg1
int 21h
;
lea dx,BufStrc ;in dx der Puffer
mov ah,0Ah
int 21h ;Zeichen eingeben
;
mov bx,dx
;
lea dx,Msg2
mov ah,09h
int 21h ;CR LF
add bx,2 ;plus 2 (Max u. Anz !)
add bl,BufStrc.Anz ;Ans Ende des Textes!
;adc bh,0 Falls Ueberlauf
mov word ptr ds:[bx],0D0Ah ;CR LF anhaengen
mov byte ptr ds:[bx+2],"$" ;$ fuer Fkt. 09h anhaengenmov ah,09h
lea dx,Msg3
int 21h
;
lea dx,BufStrc2 ;in dx der Puffer
mov ah,0Ah
int 21h ;Zeichen eingeben
;
mov bx,dx
;
lea dx,Msg2
mov ah,09h
int 21h ;CR LF
add bx,2 ;plus 2 (Max u. Anz !)
add bl,BufStrc.Anz ;Ans Ende des Textes!
;adc bh,0 Falls Ueberlauf
mov byte ptr ds:[bx+2],0H ;0h an dateinamen anhängen
;
;
mov ah, 3dh ;Öffnen der Datei
xor al, al ;nur zum lesen..
lea dx, BufStrc.Txt ;dx zeigt auf den Dateinamen
int 21h
jc dateifehler ;wenn es irgendwelche Fehler gibt beenden wir..mov bx, ax ;speichern des Handels
mov ax, 4202h ;gehe zum Ende der Datei..
xor cx, cx ;cx = dx = 0
xor dx, dx
int 21h
push ax ;ax ist die L"nge des Dateiinhaltes, wenn
;sie kleiner als 64kb ist..;)
;der Rest steht in DXmov ax, 4200h ;gehe zum anfang der Datei
xor cx,cx ;CX=DX=0
xor dx,dx
int 21hmov ah, 3fh ;lesen der gesamten Datei
pop cx ;in den Buffer
push cx ;speicher die Dateil"nge wieder im Stack
lea dx, buffer
int 21hmov ah, 3eh ;die Datei wird geschlossen
int 21hmov dx, 0h ;Setze dx als Z"hler auf 0
lea di, buffer ;hier fangen wir an zu suchen
SearchOn:
pop cx ;Dateilänge in cx
lea si, BufStrc.Txt ;was wollen wir finden ?
lodsb ;lade das erste Byte in axrepnz scasb ;Suche starten
cmp cx,0 ;wenn cx=0 dann wurde alles durchsucht..
jz disp ;Ergebnisse anzeigen
push cxmov cx, laenge ;den Rest des Strings vergleichen
repz cmpsbcmp cx,0 ;kompletter String gleich ?
jnz SearchOn ;wenn nicht weitersuchen
inc dx ;Zähler erhöhen
pop cx ;Restliche Länge überprüfen
push cx
cmp cx, 0
jne SearchOn ;weitersuchen
jmp disp ;anzeigendisp:
lea di, showstring ;in di ist der String den wir anzeigen wollenmov ax, dx ;wenn dx < 10 dann wird er umgerechnet in Dezimal
cmp ax, 10d
jnae showit
cmp ax, 100d
jae toogreat
xor dx, dx
mov cl, 10d
div cladd dl, 48d
mov byte ptr cs:[di], dl
add al, 48d
mov byte ptr cs:[di], al
inc di
showit:
add dl, 48d
mov byte ptr cs:[di], dllea dx, showstring ;Anzeigen
mov ah, 9h
int 21hEnde:
mov ah, 4ch ;Beenden..
int 21hdateifehler:
lea dx, datfehler
mov ah, 9h
int 21h
jmp Ende
toogreat: ;Zahl ist gr" er als 9
lea dx, toogre
mov ah, 9h
int 21h
jmp Ende
buffer:
END
Wäre für Hilfe dankbar
Grüße