COMPARANDO != ERROR

HMG en Español

Moderator: Rathinagiri

Post Reply
User avatar
SALINETAS24
Posts: 308
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Has thanked: 13 times
Been thanked: 16 times

COMPARANDO != ERROR

Post by SALINETAS24 » Thu Apr 18, 2019 1:07 pm

Hola a todos, aqui os paso un pequeño código, se introducen dos cadenas y las compara, mostando un mensaje "ok" si las cadenas son iguales o un "bad" si son incorrectas.

Un ejemplo obtenido.....

1 y 1 ->Ok
1 y 11 -> OK ?????
2 y 1 -> BAD
2 Y 234 -> OK
ANTONIO Y ANTONIA -> BAD
ANTONIO Y ANTON -> OK

La única forma que se me ocurre de solucionar este entuerto es añadiendo a la condición que la longitud de la cadena sea la misma, ya que da la sensación que compara cadenas de las misma longitud o a la que la tiene más corta :lol:

Code: Select all

IF LEN(cadena1)!=LEN(cadena2) .OR. cadena1!=cadena2
   msgbox("esto no es igual)
ENDIF
....., o es que tenemos un bug en el HARBOUR.

Code: Select all

/*
 * HMG - Harbour Win32 GUI library Demo
 *
 * Copyright 2002 Roberto Lopez <mail.box.hmg@gmail.com>
 * http://www.hmgforum.com//
*/

#include "hmg.ch"

Function Main

	SET NAVIGATION EXTENDED
	SET EPOCH TO 2000

	SET CENTURY ON
	SET DATE FRENCH

	DEFINE WINDOW Form_1 ;
		AT 0,0 ;
		WIDTH 640 HEIGHT 480 ;
		TITLE 'HMG Demo' ;
		MAIN 



		@ 10,10 TEXTBOX Text_1 WIDTH 110 MAXLENGTH 13 ;
			ON ENTER COMPARA()

		@ 40,10 TEXTBOX Text_2 WIDTH 110 MAXLENGTH 13 ;
			ON ENTER COMPARA()
		

	END WINDOW

	Form_1.Center

	Form_1.Activate

Return Nil

STATIC FUNC COMPARA
LOCAL c1:=Form_1.Text_1.Value
LOCAL c2:=Form_1.Text_2.Value
	IF c1!=c2
		msgbox("Son distintos","BAD")
	else
		msgbox("Son iguales","OK")
	ENDIF
RETURN

Salud para todos, y vamos con una cervecita.....

edk
Posts: 443
Joined: Thu Oct 16, 2014 11:35 am
Location: Poland
Has thanked: 129 times
Been thanked: 364 times

Post by edk » Thu Apr 18, 2019 2:28 pm

Try !(c1==c2) instead c1!=c2

User avatar
andyglezl
Posts: 1123
Joined: Fri Oct 26, 2012 7:58 pm
Location: Guadalajara Jalisco, MX
Has thanked: 32 times
Been thanked: 68 times
Contact:

Post by andyglezl » Thu Apr 18, 2019 4:16 pm

En la referencia de Harbour no trae ejemplo de "!=",
pero con "<>" si. Y parece que tienes que utilizar SET EXACT ON / OFF.

■ These examples illustrate how the not equal operator (<>)
behaves with different data types:

// Character
SET EXACT ON
? "123" <> "12345" // Result: .T.
? "12345" <> "123" // Result: .T.
? "123" <> "" // Result: .T.
? "" <> "123" // Result: .T.
SET EXACT OFF
? "123" <> "12345" // Result: .T.
? "12345" <> "123" // Result: .F.
? "123" <> "" // Result: .F.
? "" <> "123" // Result: .T.

// Date
? CToD("12/12/88") <> ;
CToD("12/12/88") // Result: .F.

// Logical
? .T. <> .T. // Result: .F.
? .T. <> .F. // Result: .T.

// NIL
? NIL <> NIL // Result: .F.
? NIL <> 12 // Result: .T.
? NIL <> "hello" // Result: .T.

// Numeric
? 2 <> 1 // Result: .T.
? 1 <> 1 // Result: .F.
Andrés González López
Desde Guadalajara, Jalisco. México.

User avatar
SALINETAS24
Posts: 308
Joined: Tue Feb 27, 2018 3:06 am
DBs Used: DBF
Has thanked: 13 times
Been thanked: 16 times

Post by SALINETAS24 » Thu Apr 18, 2019 6:35 pm

Efectivamente Andrés.., es por el SET EXACT ON, ya no recordaba este comando. :?

En mi antiguo libro de Clipper 5.2 dice.

SET EXACT on | OFF | <xlActivar>

ESTABLECE EL MODO DE COMPARACIÓN ENTRE DOS CADENAS DE CARACTERES.
ESPECIFICAR ON o <xlActivar> COMO .T. ESTABLECE MODO EXACTO DE COMPARACION
INDICAR OFF O <xlActivar> como .F. activa el modo norma de comparación.

Vamos con esa cervecita.... ;)

franco
Posts: 319
Joined: Sat Nov 02, 2013 5:42 am
DBs Used: DBF
Been thanked: 9 times

Post by franco » Sat Apr 20, 2019 4:43 pm

I try not to use set exact because in a long function I have to keep checking back to see if on or off.
I just found something strange with exact off
1=12 .F.
12=1 .T.
1==12 .F.
12==1 .F.
Andres way to check characters seems to work the best .... for me.
Franco
Franco Bushie
Canada

Post Reply