TITLE Lectura de un archivo (LeerArchivo.asm)
Código
; Abre, lee y muestra un archivo de texto, usando ; los procedimientos de Irvine32.lib. include c:\Irvine\Irvine32.inc include c:\Irvine\Macros.inc includelib c:\Irvine\Irvine32.lib includelib c:\Irvine\kernel32.lib includelib c:\Irvine\user32.lib TAM_BUFER = 5000 .data bufer BYTE TAM_BUFER DUP(?) nombreArchivo BYTE "lista.txt" manejadorArchivo DWORD ? palabra DWORD ? chara DWORD ? .code main PROC ; Abre el archivo en modo de entrada. mov edx,OFFSET nombreArchivo call OpenInputFile mov manejadorArchivo,eax ; Comprueba errores. cmp eax,INVALID_HANDLE_VALUE ; ¿error al abrir el archivo? jne archivo_ok ; no: salta mWrite <"Lista.txt no econtrado.",0dh,0ah> jmp terminar ; y termina archivo_ok: ; Lee el archivo y lo coloca en un búfer. mov edx,OFFSET bufer mov ecx,TAM_BUFER call ReadFromFile jnc comprobar_tamanio_bufer ; ¿error al leer? mWrite "Error al leer el archivo" ; sí: muestra mensaje de error call WriteWindowsMsg jmp cerrar_archivo comprobar_tamanio_bufer: cmp eax,TAM_BUFER ; ¿el búfer es lo bastante grande? jb tam_buf_ok ; sí mWrite <"Error: Bufer demasiado chico para el archivo",0dh,0ah> jmp terminar ; y termina tam_buf_ok: mov bufer[eax],0 ; inserta terminador nulo mWrite "Tamanio del archivo: " call WriteDec ; muestra el tamaño del archivo call Crlf ; Muestra el búfer. ;mWrite <"Bufer:",0dh,0ah,0dh,0ah> ;mov edx,OFFSET bufer ; muestra el búfer ;call WriteString ;call Crlf ;Convertir en bytes ;mov eax,manejadorArchivo ;mov edx,OFFSET bufer ;mov ecx,TAM_BUFER ;call WriteToFile ;mov bytesWritten,eax ;mov palabra,OFFSET bufer ;mov edx, DWORD PTR [palabra+0] ;call WriteString ;CrearPieza mov ecx, 5 mov ax, 0 mov bx, 0 PALABR: mov palabra, 0 ARMAR: mov chara, BYTE PTR OFFSET [bufer+0] cmp chara,',' je SIGUIENTE add palabra, chara inc ax jmp ARMAR SIGUIENTE: loop PALABR mov edx, palabra call WriteString ;Agarrar Palabra ;push edx ;mov edx, OFFSET bytesWritten ;call WriteString ;pop edx cerrar_archivo: mov eax,manejadorArchivo call CloseFile terminar: exit main ENDP END main
MOD: Etiquetas GeSHi.