# Is this string2range function correct?

**URL:** <https://discourse.julialang.org/t/is-this-string2range-function-correct/106655>\
**Category:** General Usage\
**Tags:** question, parsing\
**Created:** [November 24, 2023, 3:10am UTC](https://discourse.julialang.org/t/is-this-string2range-function-correct/106655 "2023-11-24T03:10:04Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [November 24, 2023, 3:10am UTC](https://discourse.julialang.org/t/is-this-string2range-function-correct/106655/1 "2023-11-24T03:10:04Z")

</div>

I wrote the following function:

```julia
function string2range(string_range)
    a, b, c = split(string_range, ':')
    a1 = parse(Float64, a)
    b1 = parse(Float64, b)
    c1 = parse(Float64, c)
    StepRangeLen(a1, b1, 1+Int64(round((c1-a1)/b1)))
 end

```

Usage:

```julia
julia> string2range("1:0.5:5")
1.0:0.5:5.0

```

I use it to parse ranges defined in configuration files.

But is it implemented correctly?

---

<div class="post-metadata">

**Author:** ![jar1](https://avatars.discourse-cdn.com/v4/letter/j/c0e974/32.png) [@jar1](https://discourse.julialang.org/u/jar1)\
**Post date:** [November 24, 2023, 3:16am UTC](https://discourse.julialang.org/t/is-this-string2range-function-correct/106655/2 "2023-11-24T03:16:07Z")

</div>

I might try

```julia
julia> s = "1:0.5:5"
"1:0.5:5"

julia> p = Meta.parse(s)
:(1:0.5:5)

julia> (p.args[1] == :(:) || error("not a range")); (:)(p.args[2:end]...)
1.0:0.5:5.0

```

---

<div class="post-metadata">

**Author:** ![ufechner7](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ufechner7/32/51363_2.png) [@ufechner7](https://discourse.julialang.org/u/ufechner7)\
**Post date:** [November 24, 2023, 3:18am UTC](https://discourse.julialang.org/t/is-this-string2range-function-correct/106655/3 "2023-11-24T03:18:04Z")

</div>

What is `(:)` doing?

---

<div class="post-metadata">

**Author:** ![jar1](https://avatars.discourse-cdn.com/v4/letter/j/c0e974/32.png) [@jar1](https://discourse.julialang.org/u/jar1)\
**Post date:** [November 24, 2023, 3:22am UTC](https://discourse.julialang.org/t/is-this-string2range-function-correct/106655/4 "2023-11-24T03:22:18Z")

</div>

It makes the range

```julia
julia> (:)(1,.5, 2) == 1:.5:2
true

```

---

<div class="post-metadata">

**Author:** ![rocco\_sprmnt21](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rocco_sprmnt21/32/20127_2.png) [@rocco\_sprmnt21](https://discourse.julialang.org/u/rocco_sprmnt21)\
**Post date:** [November 24, 2023, 7:44am UTC](https://discourse.julialang.org/t/is-this-string2range-function-correct/106655/5 "2023-11-24T07:44:32Z")

</div>

> [@ufechner7](#):
>
> What is `(:)` doing?

[here](https://discourse.julialang.org/t/n-dimensional-view-into-an-n-1-dimension-array/99345/11) you can find @sijo’s detailed answer to a similar question

---

<div class="post-metadata">

**Author:** ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)\
**Post date:** [November 24, 2023, 6:18pm UTC](https://discourse.julialang.org/t/is-this-string2range-function-correct/106655/6 "2023-11-24T18:18:28Z")

</div>

Linking [related post and solution](https://discourse.julialang.org/t/how-to-parse-a-string-with-ranges/97288/7).
