Text Scan

y programas personales para otros como tu, puede que te corrijan ;)
Responder
Avatar de Usuario
Fredinchy
Aprendiz de Mago
Mensajes: 32
Registrado: 30 Mar 2010, 01:27
Ubicación: Unknown

Text Scan

Mensaje por Fredinchy »

Hola a todos! les traigo uno de mis primeros scripts en autoit espero que les guste..

Su funcionamiento es bastante sencillo, en un documento .txt busca alguna cadena de texto y la reemplaza por otra. Si no colocamos una cadena para reemplazar simplemente borra la cadena introducida del texto.

Un amigo una vez me dijo que le daba fastidio quitar los [editar] de wikipedia o páginas por el estilo, y yo por practicar creé este script. Bueno se lo facilité a mi amigo aunque no es lo correcto jaja.. :smt005

Me gustaría ver sus críticas para mejorarlo y mejorar futuros proyectos. :smt045

Imagen

Código: (De la última versión)

Código: Seleccionar todo

#include <GUIConstantsEx.au3>
#NoTrayIcon

#Region ### START Koda GUI section ### Form=
$script="Text scan 1.0.1"
$Form1 = GUICreate($script, 351, 131)
$Input1 = GUICtrlCreateInput("", 80, 8, 177, 21)
GUICtrlSetState(-1,$GUI_DISABLE)
$Button1 = GUICtrlCreateButton("Browse", 264, 8, 81, 25)
$Label1 = GUICtrlCreateLabel("File to scan:", 8, 8, 61, 17)
$Input2 = GUICtrlCreateInput("", 80, 40, 177, 21)
$Label2 = GUICtrlCreateLabel("Text to find:", 8, 40, 72, 17)
$Input3 = GUICtrlCreateInput("", 80, 72,177,21)
$Label3 = GUICtrlCreateLabel("Replace with:",8,72,72)
$Button2 = GUICtrlCreateButton("Start Scan", 94, 100, 145, 25)
GUICtrlSetState($Button2,$GUI_DISABLE)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
main()
Func main()
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button1
			$file=FileOpenDialog("Choose file to scan",@ScriptDir,"Text Files (*.txt)", 1)
			If @error Then
				MsgBox(48,"Error Code 4","Error opening the file.")
			Else
				GUICtrlSetData($Input1,$file)
				GUICtrlSetState($Button2,$GUI_ENABLE)
			EndIf
		Case $Button2
			$aux=GUICtrlRead($Input1)
			If $aux =="" Then
				MsgBox(48,"Error Code 3","No files selected.")
			Else
				$text=FileRead($file)
				$sub=GUICtrlRead($Input2)
				$replace=GUICtrlRead($Input3)
				If $text=="" Then
					MsgBox(48,"Error Code 2","The file is empty.")
				ElseIf $sub=="" Then
					MsgBox(48,"Error Code 1",'You must enter a string in "Text to find".')
				Else
					$result=StringReplace($text,$sub,$replace)
					$replacements=@extended
					MsgBox(64, "Result","The number of replacements done was: "&$replacements)
					$box=MsgBox(4,"Save","Do you want to save result as a new file?")
					If $box=6 Then
						$save=FileSaveDialog("Save file",$file,"Text Files (*.txt)", 2 + 16)
						$var=FileOpen($save)
						If $var= -1 Then
							MsgBox(48,"Error Code 5","Error creating the new file.")
						Else
							FileWrite($save,$result)
							FileClose($var)
						EndIf
					EndIf
				EndIf
			EndIf
	EndSwitch
WEnd
EndFunc
Text scan v1.0.1 .au3 http://www.mediafire.com/?cm5y2550ydy 07/04/2010 (Versión mejorada gracias a Ximorro)
Text scan v1.0 .au3 http://www.mediafire.com/?nexmogtzqzk
Text scan v1.0 .exe http://www.mediafire.com/?ylmfmlof0hw
Última edición por Fredinchy el 07 Abr 2010, 20:58, editado 1 vez en total.
Cause no one here can ever stop us! They can try but we won't let them! No way.. :smt020
Avatar de Usuario
XPyro
Profesional del Autoit
Mensajes: 542
Registrado: 04 Mar 2007, 10:12
Ubicación: México
Contactar:

Re: Text Scan

Mensaje por XPyro »

Rápido, simple, pequeño y eficiente, para ser el primer script se ve bien trabajado a la hora de tratar con errores y solucionarlos :smt002

Buen trabajo Fredinchy :smt006
Imagen
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Text Scan

Mensaje por Ximorro »

Para ser el primer programa está realmente bien, muy pulcro.

Una cuestión ¿por qué en inglés? No tengas miedo de ponerlo en español, no va a tener menos público por eso, ¡y más en este foro!

Te comento algunas cosas para afinar...
Me temo que Koda mete más de lo necesario, así que estos udf NO te hacen falta:
ButtonConstants.au3, EditConstants.au3 y StaticConstants.au3.
Aunque uses botones, editboxes y etiquetas, no estás usando nada definido en ellas. Quitarlos hará la compilación más rápida, y el exe más pequeño.

WindowsConstants.au3 la usas por $WS_GROUP, pero resulta que eso lo mete KODA de forma innecesaria (lo odio). Eso se usa por ejemplo en los checkboxes, para que sólo haya uno activado en un grupo, pero aquí no hace falta así que puedes quitar los $WS_GROUP, y por lo tanto también la UDF.

File.au3, la usas para _FileCreate que supongo que es necesario para vaciar el archivo si éste existe. Podrías haber usado FileOpen, y entonces la UDF tampoco te haría falta. (Un poco más y nos cargamos todas las udf, ja, ja).

Una ayuda sobre las comillas: Resulta que se pueden usar tanto las dobles como las simples para especificar las cadenas, así que en vez de doblar comillas dentro de ella puedes usar las otras para la cadena, por ejemplo
"Esta ""palabra"" está entre comillas" la puedes poner como 'Esta "palabra" está entre comillas'
Al no estar doblado se lee mejor.
Lo puedes usar en el "...in ""Text to find"".", que es equivalente a '...in "Text to find".'

Te comento estas cosas porque como dices que estás empezando probablemente no lo desconocías, pero está visto que dentro de nada estarás haciendo programas muy interesantes ;-)

Y oye, felicidades por el tratamiento de errores, suele ser algo tedioso y que acaba siendo buena parte del programa, a veces se hace el doble de largo sólo por controlar la entrada del usuario. Buen trabajo.
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Fredinchy
Aprendiz de Mago
Mensajes: 32
Registrado: 30 Mar 2010, 01:27
Ubicación: Unknown

Re: Text Scan

Mensaje por Fredinchy »

Muchas gracias por las respuestas y sus opiniones :smt020

@Ximorro el inglés es porque me gusta más que el español, pero en programas más avanzados se me ocurrió (mientras estaba revisando la carpeta del ares) que los textos del programa estén en un .txt para que se le puedan implementar cualquier idioma o para modificar algo también.

Tienes mucha razón hay un exceso de udf en el programa.. que aunque sea sencillo y rápido el programa pues sería mejor que no ande cargando udf que no necesitamos realmente. Estaré pendiente de esto en mis futuros scripts y arreglaré este.

Lo de las comillas si lo sabía pero seguiré tu consejo ya que resulta más fácil cuando se lee el código. :smt045

Con respecto al FileOpen lo que yo había entendido es que se abría un archivo para poder usar las otras funciones como el FileRead en él. Gracias por aclarar. (Esto me pasa por andar leyendo atorado :smt005 )

De nuevo gracias por las respuestas, ahora a mejorar el código y lo voy a colocar en el post principal para que no haga falta descargar el .au3 solo para leerlo.

Saludos! :smt006
Cause no one here can ever stop us! They can try but we won't let them! No way.. :smt020
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Text Scan

Mensaje por Ximorro »

Por concretar: tanto FileRead como FileWrite pueden recibir un handle al fichero o un nombre de fichero. En el primer caso es necesario un FileOpen que te dé el handle, pero si usas un nombre de fichero ya se encarga él de abrirlo y cerrarlo.

Lógicamente si vas a hacer muchas lecturas y escrituras hay que hacer el FileOpen para no estar abriéndolo y cerrándolo cada vez, pero por ejemplo en tu caso que lo haces en una llamada es más directo simplemente pasando el nombre, sin FileOpen.

Saludos
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Responder