How to split a string/array with multiple separators?
Thorsten Sommer via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu May 12 12:25:08 PDT 2016
On Wednesday, 16 December 2015 at 15:27:22 UTC, Marc Schütz wrote:
> On Wednesday, 16 December 2015 at 14:47:26 UTC, Dragos Carp
> wrote:
>> On Wednesday, 16 December 2015 at 14:18:28 UTC, Borislav
>> Kosharov wrote:
>>> I want to split a string using multiple separators. In
>>> std.array the split function has a version where it takes a
>>> range as a separator, but it works differently than what I
>>> want. Say if I call it with " -> " it will search for the
>>> whole thing together. I want to pass split a list of
>>> separators say [":", ",", ";"] and if it finds any of those
>>> to split it.
>>>
>>> Sorry if this questions is stupid but I cant find how to do
>>> it.
>>
>>
>> void main()
>> {
>>
>> import std.stdio: writeln;
>> writeln("abc,def;ghi".splitter!(a =>
>> !":,;".find(a).empty).array);
>> }
>
> The call to `array` is unnecessary in this example, and you can
> use the shorter `canFind`:
>
> writeln("abc,def;ghi".splitter!(a => ":,;".canFind(a)));
Dear Borislav, Dragos and Marc,
Thanks for this question (@Borislav) and the solution's
approaches (@Dragos and @Marc). Today, I had the same task and
tried to find a solution for it. Unfortunately, the proposed
solutions seem not work.
Here is the version from Dragos (run it directly on the web):
http://ideone.com/fglk0s
Here the version from Marc:
http://ideone.com/yCaYrD
In both cases, I got the "Error: template
std.algorithm.iteration.splitter cannot deduce function from
argument types [...]" message.
Can anyone help me with a functional example? That would be great
:)
Best regards,
Thorsten
More information about the Digitalmars-d-learn
mailing list