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

2019-12-05 Thread Bastiaan Veelo via Digitalmars-d-learn

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.


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

2019-12-05 Thread Andrea Fontana via Digitalmars-d-learn

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.


One solution:

writeln(
"Hello\nHow are you?\nGood"
.splitLines()
.map!(x => x[0..x.lastIndexOf("o")])
);

But be careful: lastIndexOf could be < 0 if string is not found.


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

2019-12-05 Thread Marcone via Digitalmars-d-learn

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.