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

Bastiaan Veelo Bastiaan at Veelo.net
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], "#"); // 
#Hi#

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

   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

Bastiaan.


More information about the Digitalmars-d-learn mailing list