Task to throw away string parts, use joiner and splitter not very successful

Rémy Mouëza remy.moueza at gmail.com
Tue Dec 31 13:23:07 PST 2013


As Chris wrote, using double quotes to use strings instead of char 
solves the typing issse.

I'd also suggest the following alternative, if you're going to discard a 
lot of last elements in your code:
     import std.stdio;
     import std.algorithm;
     import std.array;
     import std.range;

     /// Return seq without its last element.
     auto poppedBack (T) (T seq) if (isInputRange!T) {
         seq.popBack; // Discards the last element.
         return seq;
     }

     void main () {
         // Prints "this.is.a".
         "this.is.a.string"
             .splitter (".")
             .poppedBack
             .joiner (".")
             .array
             .writeln;
     }


On 12/31/2013 09:57 PM, Chris Cain wrote:
> On Tuesday, 31 December 2013 at 20:49:55 UTC, Dfr wrote:
>> Hello, i have string like "this.is.a.string" and want to throw away
>> some parts separated by dots, here is first attempt:
>>
>> name = "this.is.a.string"; // <-- want to make "this.is.a" from this
>> auto nameparts = splitter(name, '.');
>> auto name1 = joiner(nameparts[0 .. $-1], '.');
>>
>> And got this error: "Error: Result cannot be sliced with []"
>>
>> So, kinda fixed it (correct way?):
>>
>> name = "this.is.a.string";
>> auto nameparts = splitter(name, '.').array;
>> auto name1 = joiner(nameparts[0 .. $-1], '.');
>>
>> got this:
>>
>> Error: template std.algorithm.joiner does not match any function
>> template declaration. Candidates are:
>> /usr/include/dmd/phobos/std/algorithm.d(2846):
>> std.algorithm.joiner(RoR, Separator)(RoR r, Separator sep) if
>> (isInputRange!RoR && isInputRange!(ElementType!RoR) &&
>> isForwardRange!Separator && is(ElementType!Separator :
>> ElementType!(ElementType!RoR)))
>>
>> Stuck here, thank you for any help.
>
>  From your error message: isForwardRange!Separator
>
> Your separator is a character, which isn't a forward range. Try this:
> `auto name1 = joiner(nameparts[0 .. $-1], ".");`



More information about the Digitalmars-d-learn mailing list