adityaparakh Posted March 1, 2018 Posted March 1, 2018 The last part of my string is in any of the below formats : productCode-quantity pairs and discount Max number of pairs will be 5 always separated by hyphen In some cases , less than 5 pairs , followed by either - or <blank>. Number of loose hyphens or spaces is not always consistent. Always followed by a unpaired number $input = 2-3 3-2 4-1 5-2 5 $input = 2-3 3-2 4-1 5-2 - 6 $input = 2-3 3-2 4-1 - - 6 $input = 2-3 3-2 4-1 6 $input = 7-3 9-4 6-4 5-4 3-4 5 $input = 4-4 6-3 3-3 2-2 - 4 $input = 14-3 16-2 13-1 12-3 10-1 4 $input = 14-3 16-2 13-1 12-3 10-1 12 $input = 2-3 3-2 4-1 - 6 i want to obtain result such $productCode[1] = first digit of pair $productCode[2] = first digit of pair $productCode[5] = first digit of pair $quantity[1] = second digit of pair $quantity[2] = second digit of pair $quantity[5] = second digit of pair $discount = last number In case , less than 5 make $productCode[4] = "-" Trying to use , $line_read = StringRegExpReplace($line_read, "(\h([\d]|[\d][\d])[-]([\d]|[\d][\d])\K(?=\h)", "|") $line_read = StringRegExpReplace($line_read, "\h\K(?=[\d][-][\d]", "|") Struggling with regex. To border it with | , then shall use sting split to seperate the two. Please help , and how to handle the cases where there is less than 5 products. Question 2 : $line_read = StringRegExpReplace($line_read, "([\d]|[\d][\d])[\h]\April[\h][\d][\d][\d][\d]\K(?=\h)", "|") $line_read = StringRegExpReplace($line_read, "\h\K(?=([\d]|[\d][\d])[\h]\April[\h][\d][\d][\d][\d])", "|") This does not work for April , how to manage the \A. Question 3 : Please advise best way to surround a regex match with | Say I wish to find any email address , and if found surround it with | on both side. ALso , Can it be done to limit the search from and to certain point in the entire line and from right to left.
mikell Posted March 1, 2018 Posted March 1, 2018 ? #Include <Array.au3> ;$s = "2-3 3-2 4-1 - - 6" $s = "14-3 16-2 13-1 12-3 10-1 12" $a = StringRegExp($s, '(?|(\d+)-(\d+)|\d+(?=$))', 3) ;_ArrayDisplay($a) $n = (UBound($a)-1)/2 ; nb of pairs Local $res[$n][3] For $i = 0 to $n-1 $res[$i][0] = $a[$i*2] ; col 0 = productCode $res[$i][1] = $a[$i*2+1] ; col 1 = quantity Next $res[0][2] = $a[$n*2] ; col 2 = discount _ArrayDisplay($res) adityaparakh 1
adityaparakh Posted March 2, 2018 Author Posted March 2, 2018 On 3/1/2018 at 2:47 PM, mikell said: ? #Include <Array.au3> ;$s = "2-3 3-2 4-1 - - 6" $s = "14-3 16-2 13-1 12-3 10-1 12" $a = StringRegExp($s, '(?|(\d+)-(\d+)|\d+(?=$))', 3) ;_ArrayDisplay($a) $n = (UBound($a)-1)/2 ; nb of pairs Local $res[$n][3] For $i = 0 to $n-1 $res[$i][0] = $a[$i*2] ; col 0 = productCode $res[$i][1] = $a[$i*2+1] ; col 1 = quantity Next $res[0][2] = $a[$n*2] ; col 2 = discount _ArrayDisplay($res) Expand Wow , Thanks. Shall try and let you know.
adityaparakh Posted March 2, 2018 Author Posted March 2, 2018 @mikell , It is working very well. Can you help me put it in this format : |3-2|2-3|14-5|6-4|99-99|99-99|5 deleting/replacing the existing occurrence is seeming difficult. Trimming out the dangling hyphens and spaces left and right. UMRD LOS BANOS CA 6036195773 2-3 4-4 1-3 --5 will become : UMRD LOS BANOS CA 6036195773|2-3|4-4|1-3|99-99|99-99|5 The last digit being the discount. This will come at the end of my line. I changed the array size , as there always have to be 5 , (Local $res[5][3]) , records. In case original data has lesser , fill up the rest with 99. $a = StringRegExp($lastsegment, '(?|(\d+)-(\d+)|\d+(?=$))', 3) $n = (UBound($a)-1)/2 ; nb of pairs Local $res[5][3] If $n > 1 Then For $i = 0 to $n-1 $res[$i][0] = $a[$i*2] ; col 0 = productCode $res[$i][1] = $a[$i*2+1] ; col 1 = quantity Next $res[0][2] = $a[$n*2] ; col 2 = discount For $j=$n to 4 Step 1 $res[$j][0] = "99" ; col 0 = productCode $res[$j][1] = "99" ; col 1 = quantity Next EndIf
mikell Posted March 2, 2018 Posted March 2, 2018 ?? $string = "UMRD LOS BANOS CA 6036195773 2-3 4-4 1-3 --5" $s = StringRegExpReplace($string, '.*?(\h\d+-\d+[\h\d-]+\d$)', "$1") ;Msgbox(0,"", $s) $b = StringRegExp($s, '(\d+-\d+)|\d+(?=$)', 3) ;_ArrayDisplay($b) Local $n = UBound($b)-1, $res = "" For $i = 0 to 4 $res &= "|" & ($i<$n ? $b[$i] : "99-99") Next $res &= "|" & $b[$n] ;Msgbox(0,"", $res) Msgbox(0,"", StringReplace($string, $s, $res) )
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