Página 1 de 1

Text Scan

Publicado: 03 Abr 2010, 00:53
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

Re: Text Scan

Publicado: 03 Abr 2010, 02:20
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

Re: Text Scan

Publicado: 06 Abr 2010, 10:00
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.

Re: Text Scan

Publicado: 07 Abr 2010, 20:17
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

Re: Text Scan

Publicado: 08 Abr 2010, 09:22
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