Título: [MASM] ¿Cómo hacer que un DWORD con un texto se separe en varios objetos?
Publicado por: TheFerydra en 20 Mayo 2018, 22:58 pm
Buenos días.
Estoy usando MASM 32 con el lenguaje Irvine para hacer un juego de ahorcado para un trabajo. Ya he logrado que meta el contenido de un archivo .txt en un DWORD, el cual tiene una lista de palabras separadas solo por comas. El problema es que no he encontrado forma de separarlos, ya que no encuentro como usar los delimitadores, o como hacer que lea un caracter a la vez para fusionarlo a una palabra por separado (Cuando trato de usar ptr, la maquina interpreta a TODO el DWORD como +0, en lugar de separarlo por caracteres).
Ya he preguntado en foros en ingles, pero no veo esperanza a que alguien responda pronto. Alguna idea?
Título: Re: [MASM] ¿Cómo hacer que un DWORD con un texto se separe en varios objetos?
Publicado por: MCKSys Argentina en 21 Mayo 2018, 01:21 am
Hola!
Según entiendo tienes un DWORD que apunta a una szString con valores separados por comas, no?
Si es así, parsear los valores sería tan sencillo como usar las funciones InString y szMid (entre otras) de la librería de MASM32.
A menos que haya entendido mal...
Quizás sería buena idea que pongas un poco de código.
Saludos!
Título: Re: [MASM] ¿Cómo hacer que un DWORD con un texto se separe en varios objetos?
Publicado por: TheFerydra en 21 Mayo 2018, 02:50 am
Codigo como tal, solo tengo esta maraña que he usado para experimentar: TITLE Lectura de un archivo (LeerArchivo.asm) ; 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.
|