View mode: basic / threaded / horizontal-split · Log in · Help
April 03, 2011
Stuck with std.algorithm.splitter
I want to split a string into an array of strings. As much as it seems
trivial I just can't make it work.

This is code I use for splitting:

-------------------------------------------------
auto input = "foo|bar";             // sample input string
auto parts = splitter(input, '|');  // split by pipe character
-------------------------------------------------

now, I would think that parts is an array. But it doesn't have .length property!
Thus, I have to use walkLength:

-------------------------------------------------
if (walkLength(parts, 2) > 1) {
	writefln("%s, %s", parts[0], parts[1]);
} else {
	writefln("%s", parts[0]);
}
-------------------------------------------------

and problem with missing .length is gone, but now I cannot access
those elements using array indexing:

test.d(14): Error: no [] operator overload for type Splitter!(string,char)
test.d(14): Error: no [] operator overload for type Splitter!(string,char)
test.d(16): Error: no [] operator overload for type Splitter!(string,char)

So, parts isn't an array but Splitter!(string,char), aha!
But as much as I've tried I cannot find a way to access elements of
Splitter by index. I've gone trough std.range and std.algorithm but
found nothing useful...

I would really like to use library function for this instead to write
my own (foreach and array slicing comes to my mind)...
April 04, 2011
Re: Stuck with std.algorithm.splitter
Aleksandar R.:

> I want to split a string into an array of strings. As much as it seems
> trivial I just can't make it work.
> 
> This is code I use for splitting:
> 
> -------------------------------------------------
> auto input = "foo|bar";             // sample input string
> auto parts = splitter(input, '|');  // split by pipe character
> -------------------------------------------------

import std.stdio, std.array;

void main() {
   string input = "foo|bar";
   //auto parts = split(input, '|'); // nope
   string[] parts = split(input, "|");

   if (parts.length > 1)
       writefln("%s, %s", parts[0], parts[1]);
   else
       writefln("%s", parts[0]);
}

Bye,
bearophile
April 04, 2011
Re: Stuck with std.algorithm.splitter
I haven't even looked into std.array... sorry..

So I won't need custom function after all. Thanks!
Top | Discussion index | About this forum | D home