Slice/Substr [0..?lastIndexOf(".")] How refer itself without create a variable?

Bastiaan Veelo Bastiaan at
Thu Dec 5 14:44:14 UTC 2019

On Thursday, 5 December 2019 at 11:28:51 UTC, Marcone wrote:
> Simple example:
> writeln("Hi\nHow are 
> you?\nGood".splitLines()[0][0..?lastIndexOf(r"\")]);
> How to refer to this string in lastIndexOf() without create a 
> variable?
> Thank you.

.splitLines[0] already just produces "Hi", containing no "\", so 
this example is a bit broken.

   writeln("#", "Hi\nHow are you?\nGood".splitLines()[0], "#"); // 

You could write a function to work around having to declare a 

   string upto(string input, string delim)
       return input[0 .. input.countUntil(delim)];

   void main()
       writeln(upto("Up to colon: skip this", ":")); // Up to colon
       writeln("Up to colon: skip this".upto(":")); // Up to colon

You can use a function literal or lambda, but it isn't pretty:

   writeln((string s){return s[0..s.countUntil(":")];}("Up to 
colon: skip this")); // Up to colon
   writeln((s => s[0..s.countUntil(":")])("Up to colon: skip 
this")); // Up to colon


More information about the Digitalmars-d-learn mailing list