Página 1 de 1

compresión de cadenas de texto

Publicado: 08 Abr 2011, 02:07
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

Re: Compilador, descompilador

Publicado: 09 Abr 2011, 11:03
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.

Re: Compilador, descompilador

Publicado: 09 Abr 2011, 12:29
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..

Re: Compilador, descompilador

Publicado: 11 Abr 2011, 13:48
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?

Re: compresión de cadenas de texto

Publicado: 13 Abr 2011, 21:24
por dacu
Ximorro , Gracias, colgare mis avances, para que pertenezcan a este foro, por si alguien lo busca.