compresión de cadenas de texto

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
dacu
Hacker del Foro
Mensajes: 106
Registrado: 20 May 2010, 00:09

compresión de cadenas de texto

Mensaje por dacu »

Buenas vengo a preguntaros como hacer lo siguiente:

Creación de una aplicación la cual a partir de un Texto (código) cree otro (código) mas abreviado.

Ejemplo

Codigo principal: Zmllc3RhDQoQcwAADQAAAAAAAADNe0WLuxYsXdjpPpK/wSvl3f28GDALBGZWYf67Xbv8t/X2/p+nXV9KvPewQ+PBFHGruf07n9Ve9XrI/

Codigo corto:
Condicion1: si se ecuentra 2 caracteres iguales, sustituir por 1 del mismo.
Condicion2: ........

Es decir, necesito crear una aplicación que, lea un archivo Texto y lo transforme a otro con dichas condiciones.

Espero que me podáis orientar, muchas gracias.

saludos
Última edición por dacu el 12 Abr 2011, 22:41, editado 1 vez en total.
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Compilador, descompilador

Mensaje por Chefito »

Pues eso se tiene que hacer con muchas muchas muchas condiciones. Tendrás que utilizar mucho los if...then, Select....case, Switch....case. Tendrás que recuperar el texto del archivo de texto (Mira fileopen y fileread) y tratarlo para luego compararlo con las instrucciones de comparación que te he dicho anteriormente. O sea, que también tienes que utilizar mucho, mucho, mucho funciones de tratamiento de texto para trabajar con el texto recuperado (las que empiezan por String.... , ejemplo: stringinstr, stringlen, stringsplit, etc, etc).

También puede que tengas que ver funciones de conversión de tipos en algunos casos (busca en la ayuda AutoIt>Function Reference>Variables and conversions).

Yo hice hace mucho tiempo una especie de lenguaje aparte con autoit bastante avanzado. Fue bastante tedioso. Tenía sus propias variables auxiliares (esto lo hice con varios arrays de variables que se podían redimensionar) y hasta podía reconocer funciones hechas por mí en el propio lenguaje. Para ello utilizé mucho las funciones de autoit Execute (ejecuta una expresión), assign (asigna una variable por su nombre) y eval (devuelve el valor de una variable definida por un string). Resumiendo y a groso modo, con estas funciones les puedes pasar funciones, comandos y variables de autoit en forma de texto. Es como si las pusiese en el propio script.

Aunque se puede hacer algo bastante decente, tiene sus limitaciones.

Si metes un lenguaje con poca cosa se podría hacer más o menos rápido, pero como le empieces a meter muchas cosas se te puede hacer muy tedioso y complicado.

AutoIt no es el lenguaje más adecuado para realizar otro lenguajes (largos). Ya sabemos que para eso está c y c++ :smt002 .

Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
dacu
Hacker del Foro
Mensajes: 106
Registrado: 20 May 2010, 00:09

Re: Compilador, descompilador

Mensaje por dacu »

Chefito, como no. jaja tu sabiduría siempre esta presente.

E conseguido lo siguiente.

Código: Seleccionar todo

a()


Func a()
	$archivo=FileOpen("Z:\autoit\scrips\comprimir\foto.txt")
	$leer= FileRead($archivo)
    Local $codigo = $leer
	Local $condicion = StringRegExpReplace($codigo, "[a][a]", "!")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	aA()
EndFunc

Func aA()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[A][A]", "¡")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	b()
EndFunc

Func b()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[b][b]", "#")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	bB()
EndFunc

Func bB()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[B][B]", "¢")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	c()
EndFunc

Func c()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[c][c]", "$")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	cC()
EndFunc

Func cC()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[C][C]", "£")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	d()
EndFunc

Func d()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[d][d]", "%")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	dD()
EndFunc

Func dD()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[D][D]", "¤")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	e()
EndFunc

Func e()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[e][e]", "(")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	eE()
EndFunc

Func eE()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[E][E]", "¥")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	f()
EndFunc

Func f()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[f][f]", ")")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	fF()
EndFunc

Func fF()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[F][F]", "¦")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	g()
EndFunc

Func g()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[g][g]", "*")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	gG()
EndFunc

Func gG()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[G][G]", "§")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	h()
EndFunc

Func h()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[h][h]", ",")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	hH()
EndFunc

Func hH()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[H][H]", "¨")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	i()
EndFunc

Func i()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[i][i]", "-")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	iI()
EndFunc

Func iI()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[I][I]", "©")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	j()
EndFunc

Func j()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[j][j]", ".")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	jJ()
EndFunc

Func jJ()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[J][J]", "ª")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	k()
EndFunc

Func k()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[k][k]", ":")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	kK()
EndFunc

Func kK()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[K][K]", "«")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	l()
EndFunc

Func l()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[l][l]", ";")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	lL()
EndFunc

Func lL()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[L][L]", "¬")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	m()
EndFunc

Func m()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[m][m]", "<")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	mM()
EndFunc

Func mM()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[M][M]", "®")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	n()
EndFunc

Func n()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[n][n]", ">")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	nN()
EndFunc

Func nN()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[N][N]", "¯")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	o()
EndFunc

Func o()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[o][o]", "?")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	oO()
EndFunc

Func oO()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[O][O]", "°")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	p()
EndFunc

Func p()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[p][p]", "@")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	pP()
EndFunc

Func pP()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[P][P]", "±")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	q()
EndFunc

Func q()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[q][q]", "[")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	qQ()
EndFunc

Func qQ()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[Q][Q]", "²")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	r()
EndFunc

Func r()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[r][r]", "\")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	rR()
EndFunc

Func rR()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[R][R]", "³")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	s()
EndFunc

Func s()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[s][s]", "]")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	sS()
EndFunc

Func sS()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[S][S]", "´")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	t()
EndFunc

Func t()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[t][t]", "^")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	tT()
EndFunc

Func tT()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[T][T]", "µ")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	u()
EndFunc

Func u()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[u][u]", "_")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	uU()
EndFunc

Func uU()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[U][U]", "¶")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	v()
EndFunc

Func v()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[v][v]", "`")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	vV()
EndFunc

Func vV()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[V][V]", "·")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	w()
EndFunc

Func w()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[w][w]", "{")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	wW()
EndFunc

Func wW()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[W][W]", "¸")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	x()
EndFunc

Func x()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[x][x]", "|")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	xX()
EndFunc

Func xX()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[X][X]", "¹")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	y()
EndFunc

Func y()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[y][y]", "}")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	yY()
EndFunc

Func yY()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[Y][Y]", "º")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	z()
EndFunc

Func z()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[z][z]", "~")
	FileWrite("archivo13.txt",$condicion)
	Global $archivo= FileRead("archivo13.txt")
	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")
	zZ()
EndFunc

Func zZ()
    Local $codigo = $archivo
	Local $condicion = StringRegExpReplace($codigo, "[Z][Z]", "»")
	FileWrite("archivo13.txt",$condicion)
;~ 	Global $archivo= FileRead("archivo13.txt")
;~ 	FileDelete("Z:\autoit\scrips\comprimir\archivo13.txt")

EndFunc

Como veras lo e echo con mis pocos conocimientos que tengo pero algo hace XD..
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Compilador, descompilador

Mensaje por Ximorro »

Buf, así es muy laborioso, función a función. Sería mejor hacer una tabla de traducción almacenada en un array o algo así.

¿Y usar un compresor? Hay udf que trabajando conjuntamente con una dll crean zip, rar, etc. La cosa no es que sea básica pero es que lo que quieres hacer tampoco lo es.

Una cosa, creo que deberías cambiar el título del post, compilar/decompilar tiene que ver con crear código máquina del código fuente de un programa y viceversa. Cuando los usuarios busquen en el foro cosas sobre compilación saldrá esto y no tiene mucho que ver.

Lo tuyo es más bien compresión de cadenas de texto ¿no?
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
dacu
Hacker del Foro
Mensajes: 106
Registrado: 20 May 2010, 00:09

Re: compresión de cadenas de texto

Mensaje por dacu »

Ximorro , Gracias, colgare mis avances, para que pertenezcan a este foro, por si alguien lo busca.
Responder