JihanLukas Posted June 13, 2011 Share Posted June 13, 2011 (edited) Someone knows a strtr (php) function in autoit ? Thanks Edited June 14, 2011 by JihanLukas Link to comment Share on other sites More sharing options...
Andreik Posted June 13, 2011 Share Posted June 13, 2011 (edited) I don't knok php but from what I read looks like StringReplace() or can be done with StringReplace(). Edited June 13, 2011 by Andreik When the words fail... music speaks. Link to comment Share on other sites More sharing options...
JihanLukas Posted June 13, 2011 Author Share Posted June 13, 2011 I don't knok php but from what I read looks like StringReplace() or can be done with StringReplace().Stringreplace replace one char with another, strtr replace chars in a string with a char of second string at same position :strtr("Example", "xam", "Xzt) -> EXztple (x replaced with X, a replaced with z and m replaced with t) Link to comment Share on other sites More sharing options...
smartee Posted June 13, 2011 Share Posted June 13, 2011 MsgBox(64, "I beg to differ :)", StringReplace("Example", "xam", "Xzt")) Link to comment Share on other sites More sharing options...
JihanLukas Posted June 13, 2011 Author Share Posted June 13, 2011 MsgBox(64, "I beg to differ :)", StringReplace("Example", "xame", "Xzty")) Stringreplace replace one char with another, strtr replace chars in a string with a char of second string at same position : strtr("One Example", "xame", "Xzty) -> Ony EXztply (all x replaced with X, all a replaced with z, all m replaced with t and all e with y) ' string strtr ( string $str , string $from , string $to ) string strtr ( string $str , array $replace_pairs ) If given three arguments, this function returns a copy of str where all occurrences of each (single-byte) character in from have been translated to the corresponding character in to, i.e., every occurrence of $from[$n] has been replaced with $to[$n], where $n is a valid offset in both arguments. If from and to have different lengths, the extra characters in the longer of the two are ignored. The length of str will be the same as the return value's. ' Link to comment Share on other sites More sharing options...
smartee Posted June 13, 2011 Share Posted June 13, 2011 hi JihanLukas , Ok, firstly, Welcome to the forums Secondly, did you try running the code I posted above? What did you see? Your perception of StringReplace's behavior is wrong. Read the help file and you will learn that it replaces a substring in a string, not just a single character. -smartee Link to comment Share on other sites More sharing options...
sahsanu Posted June 13, 2011 Share Posted June 13, 2011 (edited) strtr("One Example", "xame", "Xzty) -> Ony EXztply (all x replaced with X, all a replaced with z, all m replaced with t and all e with y) If from and to have different lengths, the extra characters in the longer of the two are ignored. The length of str will be the same as the return value's. I did a function for you. Take a look to check whether this is what you need (or take it as an example to do your own function): expandcollapse popup$string = "this is a Test" $first = "tTieat" $second = "Tt134" ;Example $resultstring = _strtr($string, $first, $second) ConsoleWrite("Origin: " & $string & @CRLF & "Result: " & $resultstring & @CRLF) ;Here starts the function Func _strtr($yourstring, $param1, $param2) ;If any of the params are empty, set error and return If $param1 = "" Or $param2 = "" Or $yourstring = "" Then Return SetError(-1,-1,-1) ;Check params lenght $lenghtparam1 = StringLen($param1) $lenghtparam2 = StringLen($param2) ;Check both params an Select Case $lenghtparam1 < $lenghtparam2 $param2 = StringLeft($param2,$lenghtparam1) Case $lenghtparam1 > $lenghtparam2 $param1 = StringLeft($param1,$lenghtparam2) EndSelect ;Put all characters of the params and the string in arrays $aparam1 = StringSplit($param1,"") $aparam2 = StringSplit($param2,"") $ayourstring = StringSplit($yourstring,"") ;Loop the string and replace every character (if needed) ;). It is Case Sensitive For $i = 1 to $ayourstring[0] For $j = 1 to $aparam1[0] If $ayourstring[$i] == $aparam1[$j] Then $ayourstring[$i] = $aparam2[$j] ExitLoop EndIf Next Next ;Put replaced string array into a single string and return it Local $result = "" For $i = 1 to $ayourstring[0] $result &= $ayourstring[$i] Next Return $result EndFunc ;==>_strtr Edit: I forgot to cut $params to made them the same lenght. Script fixed. Edit2: Added some comments and also a check to avoid an empty string. Edited June 13, 2011 by sahsanu Link to comment Share on other sites More sharing options...
JihanLukas Posted June 14, 2011 Author Share Posted June 14, 2011 hi JihanLukas ,Ok, firstly, Welcome to the forums Secondly, did you try running the code I posted above? What did you see?Your perception of StringReplace's behavior is wrong. Read the help file and you will learn that it replaces a substring in a string, not just a single character.-smarteeBut i dont want to replace a substring... but chars !!! Link to comment Share on other sites More sharing options...
JihanLukas Posted June 14, 2011 Author Share Posted June 14, 2011 (edited) Thanks.... I tried to use RegEx to do it, but found no solution... Your function works... I did a function for you. Take a look to check whether this is what you need (or take it as an example to do your own function): expandcollapse popup$string = "this is a Test" $first = "tTieat" $second = "Tt134" ;Example $resultstring = _strtr($string, $first, $second) ConsoleWrite("Origin: " & $string & @CRLF & "Result: " & $resultstring & @CRLF) ;Here starts the function Func _strtr($yourstring, $param1, $param2) ;If any of the params are empty, set error and return If $param1 = "" Or $param2 = "" Or $yourstring = "" Then Return SetError(-1,-1,-1) ;Check params lenght $lenghtparam1 = StringLen($param1) $lenghtparam2 = StringLen($param2) ;Check both params an Select Case $lenghtparam1 < $lenghtparam2 $param2 = StringLeft($param2,$lenghtparam1) Case $lenghtparam1 > $lenghtparam2 $param1 = StringLeft($param1,$lenghtparam2) EndSelect ;Put all characters of the params and the string in arrays $aparam1 = StringSplit($param1,"") $aparam2 = StringSplit($param2,"") $ayourstring = StringSplit($yourstring,"") ;Loop the string and replace every character (if needed) ;). It is Case Sensitive For $i = 1 to $ayourstring[0] For $j = 1 to $aparam1[0] If $ayourstring[$i] == $aparam1[$j] Then $ayourstring[$i] = $aparam2[$j] ExitLoop EndIf Next Next ;Put replaced string array into a single string and return it Local $result = "" For $i = 1 to $ayourstring[0] $result &= $ayourstring[$i] Next Return $result EndFunc ;==>_strtr Edit: I forgot to cut $params to made them the same lenght. Script fixed. Edit2: Added some comments and also a check to avoid an empty string. Edited June 14, 2011 by JihanLukas Link to comment Share on other sites More sharing options...
smartee Posted June 14, 2011 Share Posted June 14, 2011 Oh ok, well here's another way that returns the number of replacements too Guess what It uses StringReplace() Func _ReplaceCharsInString($sString, $sChars, $sReplaceChars) Local $iStringLen = StringLen($sString) Local $iCharsLen = StringLen($sChars) Local $iReplaceCharsLen = StringLen($sReplaceChars) Local $iReplacementsCount = 0 If (($iStringLen + $iCharsLen) < 2) Then Return SetError(0, $iReplacementsCount, $sString) If $iCharsLen > $iReplaceCharsLen Then $sChars = StringLeft($sChars, $iReplaceCharsLen) For $i = 1 To StringLen($sChars) $sString = StringReplace($sString, StringMid($sChars, $i, 1), StringMid($sReplaceChars, $i, 1)) $iReplacementsCount += @extended Next Return SetError(0, $iReplacementsCount, $sString) EndFunc ;==>_ReplaceCharsInString MsgBox(64, "Demo 2", "_ReplaceCharsInString(""Example"", ""xame"", ""Xzty"")" & @CRLF & "Example=>" & _ReplaceCharsInString("Example", "xame", "Xzty") & @CRLF & "Number of replacements: " & @extended) -smartee Link to comment Share on other sites More sharing options...
sahsanu Posted June 14, 2011 Share Posted June 14, 2011 Oh ok, well here's another way that returns the number of replacements too Hello smartee, Just an issue with your function. It will replace characters over the modified string so it will return inaccurate results: Following this example; $string = "this is a Test" $first = "tTieat" $second = "Tt134" $result = _ReplaceCharsInString($string, $first, $second) It will return th1s 1s 4 t3st and it should be Th1s 1s 4 t3sT Link to comment Share on other sites More sharing options...
smartee Posted June 14, 2011 Share Posted June 14, 2011 I thought that was the behavior desired, well then i guess your function will be the way to go Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now