PERTU Posted June 27, 2007 Share Posted June 27, 2007 Hi, I have an array that looks like this: CODE [0]|3 [1]|v1.stage [2]|v2.stage [3]|v5.stage And I want to get the highest numerical value from it. So in this example I want it to return "5". I've tried all of the following: CODE MsgBox(0,'Max Index String value',_ArrayMaxIndex( $avArray, 0, 1)) MsgBox(0,'Max Index Numeric value',_ArrayMaxIndex( $avArray, 1, 1)) ; MsgBox(0,'Max String value',_ArrayMax( $avArray, 0, 1)) MsgBox(0,'Max Numeric value',_ArrayMax( $avArray, 1, 1)) ; MsgBox(0,'Min Index String value',_ArrayMinIndex( $avArray , 0, 1)) MsgBox(0,'Min Index Numeric value',_ArrayMinIndex( $avArray, 1, 1)) ; MsgBox(0,'Min String value',_ArrayMin( $avArray, 0, 1)) MsgBox(0,'Min Numeric value',_ArrayMin( $avArray, 1, 0)) But none is returning 5. Anyone knows how to get 5? Thank you, Olivier. Link to comment Share on other sites More sharing options...
Paulie Posted June 27, 2007 Share Posted June 27, 2007 (edited) If the format is always "vX.stage" then you can just StringSplit it by the "." and then StringTrimLeft 1 character. And I'm not sure, But _ArraySort() my do it, Or look at stringmid Edited June 27, 2007 by Paulie Link to comment Share on other sites More sharing options...
evilertoaster Posted June 27, 2007 Share Posted June 27, 2007 here's one way- dim $array[4] $array[0]=3 $array[1]="v1.stage" $array[2]="v2.stage" $array[3]="v5.stage" MsgBox(0,"",HighestInt($array)) Func HighestInt($inArray) $max=0 if not IsArray($inArray) then Return 0 for $i=0 to UBound($inArray)-1 $tempString = StripText($array[$i]) if $tempString>$max then $max = $tempString Next Return $max EndFunc func StripText($inString) dim $outString for $i=0 to StringLen($inString) $char=int(StringMid($inString,$i,1)) if $char<>0 Then $outString=$outString & $char Next Return $outString EndFunc Link to comment Share on other sites More sharing options...
PsaltyDS Posted June 27, 2007 Share Posted June 27, 2007 (edited) I have an array that looks like this: [0]|3 [1]|v1.stage [2]|v2.stage [3]|v5.stage And I want to get the highest numerical value from it. So in this example I want it to return "5". A smart person would code a slick RegExp to pull the number out, but since it's just me: dim $array[5] $array[0]=3 $array[1]="v1.stage" $array[2]="|v2.stage" $array[3]="|v5.stage" $array[4]="abc_v68.unstage" MsgBox(0,"",HighestInt($array)) Func HighestInt($inArray) Local $i, $v, $max = 0 if not IsArray($inArray) then Return 0 for $i = 0 to UBound($inArray)-1 $v = StringInStr($array[$i], "v") $inArray[$i] = StringTrimLeft($inArray[$i], $v) $v = StringInStr($inArray[$i], ".") $inArray[$i] = StringLeft($inArray[$i], $v - 1) if $inArray[$i] > $max then $max = $inArray[$i] Next Return $max EndFunc That kind of solution depends on knowing that the data format will aways be: <something> v <number> . <something> It's just pulling whatever is between the first 'v' and the next '.' Edited June 27, 2007 by PsaltyDS Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
PERTU Posted June 27, 2007 Author Share Posted June 27, 2007 (edited) In fact I wanted a 3 digit number. So for my example I want "5" to be returned as "005". I tried something that looks like Paulie idea: CODE $FileList = _FileListToArray($dirstage) $version = StringRight("00" & StringMid(_ArrayMax( $FileList, 0, 1), 2, StringInStr(_ArrayMax( $FileList, 0, 1), ".") -2), 3) msgbox( 0, "MoveRenderset", "La version est: "&$version) It seems to work alright, but will only work if the file keep the same structure. ie: "vX.stage". So I'll look at evilertoaster's code to see if I can understand it, and see if it works with any file structure, not just "vX.stage". Thanks to both of you, Olivier. edit: I'll also take a look at your code PsaltyDS. Thank you. Edited June 27, 2007 by PERTU Link to comment Share on other sites More sharing options...
PsaltyDS Posted June 27, 2007 Share Posted June 27, 2007 In fact I wanted a 3 digit number. So for my example I want "5" to be returned as "005". edit: I'll also take a look at your code PsaltyDS. ; Return $max Return StringFormat("%03d", $max) Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted June 27, 2007 Moderators Share Posted June 27, 2007 A smart person would code a slick RegExp to pull the number out, but since it's just me: dim $array[5] $array[0]=3 $array[1]="v1.stage" $array[2]="|v2.stage" $array[3]="|v5.stage" $array[4]="abc_v68.unstage" MsgBox(0,"",HighestInt($array)) Func HighestInt($inArray) Local $i, $v, $max = 0 if not IsArray($inArray) then Return 0 for $i = 0 to UBound($inArray)-1 $v = StringInStr($array[$i], "v") $inArray[$i] = StringTrimLeft($inArray[$i], $v) $v = StringInStr($inArray[$i], ".") $inArray[$i] = StringLeft($inArray[$i], $v - 1) if $inArray[$i] > $max then $max = $inArray[$i] Next Return $max EndFuncoÝ÷ Ù8Z¶H§vì¢[Ýz§vÊ'z0x-«mçZµ§è®fÂ)ek²±·¥¶Ê&zØb-¾[gºfÞ®e¶Ê&zØb-"Ýý²;¬¶¥)àÂz÷«ÆÞ·Ø^~*ì·oßÖ§vØ^ìmßÝýþ«¨µå,xDF¬Ê°z·¬º²Ø§æ«'«Ê¢é]r§ëazö«©í¢»¬zéí¨º·r§ºfÞ¬.¦,y«¢+Ø¥¹±Õ±ÐíÉÉä¹ÔÌÐì)¥´ÀÌØíÉÉålÕt(ÀÌØíÉÉålÁtôÌ(ÀÌØíÉÉålÅtôÅÕ½ÐíØĹÍÑÅÕ½Ðì(ÀÌØíÉÉålÉtôÅÕ½ÐíñØȹÍÑÅÕ½Ðì(ÀÌØíÉÉålÍtôÅÕ½ÐíñØÔ¹ÍÑÅÕ½Ðì(ÀÌØíÉÉålÑtôÅÕ½Ðí}ØØà¹Õ¹ÍÑÅÕ½Ðì((ÀÌØí!¥¡ÍÐô}!¥¡ÍÑ%¹Ð ÀÌØíÉÉä°Ä°ÌäíØÌäì°ÌäìÀäÈì¸Ìäì¤)}ÉÉå¥ÍÁ±ä ÀÌØí!¥¡ÍФ()Õ¹}!¥¡ÍÑ%¹Ð ÀÌØíÙÉÉä°ÀÌØí¥ ÍôÀ°ÀÌØíÍMÑÉÐôÌäìÌäì°ÀÌØí͹ôÌäìÌäì¤(%1½°ÀÌØí¹!½±±µ9Õ´°ÀÌØí¹5á9Õ´°ÀÌØí¹QµÁ9Õ´°ÀÌØíMI(%½ÈÀÌØí¥ ôÀÌØí¥ ÍQ¼U ½Õ¹ ÀÌØíÙÉÉ䤴Ä($$ÀÌØíMIôMÑÉ¥¹IáÀ ÀÌØíÙÉÉålÀÌØí¥ t°ÀÌØíÍMÑÉеÀìÌäì ÀäÈí¬¤ÌäìµÀìÀÌØí͹°Ä¤($%%%ÍÉÉä ÀÌØíMI¤Q¡¸($$$ÀÌØí¹QµÁ9Õ´ô%¹Ð ÀÌØíMIlÁt¤($$%%ÀÌØí¹QµÁ9Õ´ÐìôÀÌØí¹5á9Õ´Q¡¸($$$$ÀÌØí¹5á9Õ´ôÀÌØí¹QµÁ9Õ´($$$$ÀÌØí¹!½±±µ9Õ´ôÀÌØí¥ ($$%¹%($%¹%(%9áÐ(%%ÀÌØí¹5á9Õ´ôÌäìÌäìQ¡¸IÑÕɸMÑÉÉ½È È°À°À¤(%1½°ÀÌØíIÑÕɹlÍtôlÈ°ÀÌØí¹5á9Õ´°ÀÌØí¹!½±±µ9Õµt(%IÑÕɸÀÌØíIÑÕɸ)¹Õ¹ Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. 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