Global $aOrig = StringSplit("Š,Œ,Ž,š,œ,ž,Ÿ,¥,µ,À,Á,Â,Ã,Ä,Å,Æ,Ç,È,É,Ê,Ë,Ì,Í,Î,Ï,Ð,Ñ,Ò,Ó,Ô,Õ,Ö,Ø,Ù,Ú,Û,Ü,Ý,ß,à,á,â,ã,ä,å,æ,ç,è,é,ê,ë,ì,í,î,ï,ð,ñ,ò,ó,ô,õ,ö,ø,ù,ú,û,ü,ý,ÿ", ",", 2) Global $aDest = StringSplit("S,O,Z,s,o,z,Y,Y,u,A,A,A,A,A,A,A,C,E,E,E,E,I,I,I,I,D,N,O,O,O,O,O,O,U,U,U,U,Y,s,a,a,a,a,a,a,a,c,e,e,e,e,i,i,i,i,o,n,o,o,o,o,o,o,u,u,u,u,y,y", ",", 2) ;Versión específica para expresiones regulares Global $aOrig2 = StringSplit("Š,Ž,š|ß,ž,À|Á|Â|Ã|Ä|Å|Æ,Ç,È|É|Ê|Ë,Ì|Í|Î|Ï,Ð,Ñ,Ò|Ó|Ô|Õ|Ö|Ø|Œ,Ù|Ú|Û|Ü,Ÿ|¥|Ý,à|á|â|ã|ä|å|æ,ç,è|é|ê|ë,ì|í|î|ï,ñ,ð|ò|ó|ô|õ|ö|ø|œ,ù|ú|û|ü|µ,ý|ÿ", ",", 2) Global $aDest2 = StringSplit("S,Z,s,z,A,C,E,I,D,N,O,U,Y,a,c,e,i,n,o,u,y", ",", 2) $dict = ObjCreate("Scripting.Dictionary") If Not IsObj($dict) Then MsgBox(48, "Error", "¡El Diccionario no se ha podido crear!") Exit EndIf For $i = 0 To Ubound($aOrig)-1 $dict.Add($aOrig[$i], $aDest[$i]) Next ;$entrada = "Eštê ES UÑ TÈXTØ DE PRUEBAÁEÉOÓIÍ" $entrada = FileRead("D:\Programacion\AutoIt\Cadenas\DonQuijote.txt") $tIni = TimerInit() $salida = _MultiTexto($entrada) $tFin = TimerDiff($tIni) ConsoleWrite("Leyendo el texto muchas veces (StringReplace): " & Round($tFin/1000, 3) & @CRLF) ConsoleWrite(StringLeft($salida,100) & @CRLF) $tIni = TimerInit() $salida = _MultiER($entrada) $tFin = TimerDiff($tIni) ConsoleWrite("Leyendo el texto muchas veces (StringRegExpReplace): " & Round($tFin/1000, 3) & @CRLF) ConsoleWrite(StringLeft($salida,100) & @CRLF) $tIni = TimerInit() $salida = _MultiCarDict($entrada) $tFin = TimerDiff($tIni) ConsoleWrite("Leyendo cada carácter - diccionario: " & Round($tFin/1000, 3) & @CRLF) ConsoleWrite(StringLeft($salida,100) & @CRLF) $dict.RemoveAll() $dict = 0 $tIni = TimerInit() $salida = _MultiCarArr($entrada) $tFin = TimerDiff($tIni) ConsoleWrite("Leyendo cada carácter - arrays: " & Round($tFin/1000, 3) & @CRLF) ConsoleWrite(StringLeft($salida,100) & @CRLF) Func _MultiTexto($Texto) For $i = 0 To Ubound($aOrig)-1 $Texto = StringReplace($Texto, $aOrig[$i], $aDest[$i], 0, 1) Next Return $Texto EndFunc Func _MultiER($Texto) For $i = 0 To Ubound($aOrig2)-1 $Texto = StringRegExpReplace($Texto, $aOrig2[$i], $aDest2[$i]) Next Return $Texto EndFunc Func _MultiCarArr($Texto) Local $res = "", $aTexto = StringSplit($Texto, "", 2), $ubO = Ubound($aOrig) For $c In $aTexto $i = 0 Do $i += 1 Until $i = $ubO Or $aOrig[$i] == $c If $i = $ubO Then $res &= $c Else $res &= $aDest[$i] EndIf Next Return $res EndFunc ;~ Func _MultiCarArr($Texto) ;Versión con StringMid ;~ Local $res = "", $ubO = Ubound($aOrig) ;~ For $ci = 1 To StringLen($Texto) ;~ $c = StringMid($Texto, $ci, 1) ;~ $i = 0 ;~ Do ;~ $i += 1 ;~ Until $i = $ubO Or $aOrig[$i] == $c ;~ If $i = $ubO Then ;~ $res &= $c ;~ Else ;~ $res &= $aDest[$i] ;~ EndIf ;~ Next ;~ Return $res ;~ EndFunc Func _MultiCarDict($Texto) Local $res = "", $aTexto = StringSplit($Texto, "", 2) For $c In $aTexto If $dict.Exists($c) Then $res &= $dict.item($c) Else $res &= $c EndIf Next Return $res EndFunc ;Esta versión no usa Exists() pero crea pares Clave-Vacío ;~ Func _MultiCarDict($Texto) ;~ Local $r, $res = "", $aTexto = StringSplit($Texto, "", 2) ;~ For $c In $aTexto ;~ $r = $dict.item($c) ;~ If Not $r Then $r = $c ;~ $res &= $r ;~ Next ;~ Return $res ;~ EndFunc ;Esta versión si no encuentra correspondencia crear pares Clave-Valor donde Clave=Valor (sustitución identidad) ;~ Func _MultiCarDict($Texto) ;~ Local $r, $res = "", $aTexto = StringSplit($Texto, "", 2) ;~ For $c In $aTexto ;~ $r = $dict.item($c) ;~ If Not $r Then ;~ $r = $c ;~ $dict.item($c) = $c ;~ EndIf ;~ $res &= $r ;~ Next ;~ Return $res ;~ EndFunc