Jump to content
charon

How to add colon every 2 characters in string

Recommended Posts

charon

I am trying to turn this "00204070F48F" into this: "00:20:40:70:F4:8F". I thought I could use _StringInsert but doesn't seem to be working

#include <MsgBoxConstants.au3>
#include <String.au3>

;turn this "00204070F48F" into this: "00:20:40:70:F4:8F"
$x = "00204070F48F"
$StrLen = StringLen($x)
$sInsertString = ":"
$pos = 2

DIM $results[6]
For $i = 0 To 4
    $results[$i] = _StringInsert ( $x, $sInsertString, $pos )
    $pos = $pos + 2
    msgbox(0, "", $results[$i])
Next

Share this post


Link to post
Share on other sites
water

Something like this:

#include <MsgBoxConstants.au3>
#include <String.au3>

;turn this "00204070F48F" into this: "00:20:40:70:F4:8F"
Global $sX = "00204070F48F"
Global $sResult, $iPos = 2, $sInsertString = ":"
For $i = 0 To 6
    $sResult = $sResult & StringMid($sX, $i * 2 + 1, 2) & $sInsertString
Next
$sResult = StringLeft($sResult, 17)
MsgBox(0, "", $sResult)

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-12-03 - Version 1.4.11.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
Tutorials:

ADO - Wiki

 

Share this post


Link to post
Share on other sites
Rockerfeller

#include <String.au3>

$x = "00204070F48F"
$sInsertString = ":"

For $i = 10 To 2 Step -2
    $x = _StringInsert($x, $sInsertString, $i)
Next
MsgBox(0, "", $x)

:)

Edited by Rockerfeller

Share this post


Link to post
Share on other sites
water

I'm sure some RegExp gurus will chime in with a one-liner :)


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-12-03 - Version 1.4.11.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
Tutorials:

ADO - Wiki

 

Share this post


Link to post
Share on other sites
water

Ahh ... here they are ;)


My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2018-12-03 - Version 1.4.11.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (2018-10-31 - Version 1.3.4.1) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2017-07-21 - Version 0.4.0.1) - Download - General Help & Support - Example Scripts
PowerPoint (2017-06-06 - Version 0.0.5.0) - Download - General Help & Support
Excel - Example Scripts - Wiki
Word - Wiki
 
Tutorials:

ADO - Wiki

 

Share this post


Link to post
Share on other sites
kylomas

and again...

local $aTmp = stringsplit($str,'',2), $out
for $1 = 0 to ubound($aTmp) - 1
    $out &= ( mod($1,2) ? $aTmp[$1] & ':' : $aTmp[$1])
Next

if stringright($out,1) = ':' then $out = stringtrimright($out,1)

ConsoleWrite($out & @CRLF)

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites
kylomas

Hey mikell, I might be getting the hang of this Klingon...

local $str = '00204070F48F'
ConsoleWrite(stringregexpreplace($str,'(.{2})(?!$)','$1:') & @CRLF)

Forum Rules         Procedure for posting code

"I like pigs.  Dogs look up to us.  Cats look down on us.  Pigs treat us as equals."

- Sir Winston Churchill

Share this post


Link to post
Share on other sites
mikell

Nice   :thumbsup:

StringRegExpReplace($str, "..(?!$)", "$0:")

But the code in post #7 is better because you get rid of backreferences  ;)

Edited by mikell

Share this post


Link to post
Share on other sites
SadBunny

Another way, a variant on kylomas' solution but with a positive lookahead assertion. Can't top mikell's solution in terms of leetness though.

$x = StringRegExpReplace($str, "(..)(?=.)", "$1:")
Edited by SadBunny

Roses are FF0000, violets are 0000FF... All my base are belong to you.

Share this post


Link to post
Share on other sites
SadBunny

Or like this, with a recursive function and a shorthand if:

$str = fix('00204070F48F')

ConsoleWrite($str & @CRLF)

Func fix($x)
    Return StringLen($x) == 2 ? $x : StringLeft($x, 2) & ":" & fix(StringMid($x, 3))
EndFunc
  • Like 1

Roses are FF0000, violets are 0000FF... All my base are belong to you.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×