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.

Reply via email to