Re: Real simple question... for good programmers

2022-10-22 Thread Steven Schveighoffer via Digitalmars-d-learn

On 10/22/22 5:53 PM, WhatMeWorry wrote:



string[] tokens = userSID.output.split!isWhite;
writeln("tokens = ", tokens);

tokens = ["SID", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"S-1-5-21-3823976785-3597194045-4221507747-1779", "", "", "", "", "", 
"", "", ""]



Is there a clever way that I can discard all the extra null strings in 
the resultant string array?


I've been playing with isControl, whitespace, etc. Ready to rip my hair 
out.


Try just split without the `isWhite`. If you look at the docs, you will see:

"When no delimiter is provided, strings are split into an array of 
words, using whitespace as delimiter. Runs of whitespace are merged 
together (no empty words are produced)."


-Steve



Re: Real simple question... for good programmers

2022-10-22 Thread Paul Backus via Digitalmars-d-learn

On Saturday, 22 October 2022 at 21:53:05 UTC, WhatMeWorry wrote:



string[] tokens = userSID.output.split!isWhite;
writeln("tokens = ", tokens); 

[...]
Is there a clever way that I can discard all the extra null 
strings in the resultant string array?


Easiest way is to use [`filter`][1]. Here's an example:

```d
import std.algorithm: splitter, filter;
import std.uni: isWhite; // or use std.ascii for non-unicode input
import std.array: array;
import std.stdio: writeln;

string exampleText =
"Hello   123-456-ABCx\ny\tz\r\nwvu   goodbye";

void main()
{
string[] tokens = exampleText
.splitter!isWhite
.filter!(t => t.length > 0)
.array;
writeln("tokens = ", tokens);
}
```

I've also used the lazily-evaluated [`splitter`][2] instead of 
the eagerly-evaluated `split`, to avoid allocating a temporary 
array unnecessarily.


[1]: 
https://phobos.dpldocs.info/std.algorithm.iteration.filter.html
[2]: 
https://phobos.dpldocs.info/std.algorithm.iteration.splitter.3.html


Re: Real simple question... for good programmers

2022-10-22 Thread Daniel via Digitalmars-d-learn

On Saturday, 22 October 2022 at 22:01:09 UTC, Enjoys Math wrote:

On Saturday, 22 October 2022 at 21:53:05 UTC, WhatMeWorry wrote:



string[] tokens = userSID.output.split!isWhite;
writeln("tokens = ", tokens); 

tokens = ["SID", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", 
"S-1-5-21-3823976785-3597194045-4221507747-1779", "", "", "", 
"", "", "", "", ""]	



Is there a clever way that I can discard all the extra null 
strings in the resultant string array?


I've been playing with isControl, whitespace, etc. Ready to 
rip my hair out.




Why not `strip`?  Works on ranges:
https://dlang.org/phobos/std_algorithm_mutation.html#.strip


Strip won't work because it only works on the beginning and ends 
of the range.  What you want is `remove`.  See my other MWE post.




Re: Real simple question... for good programmers

2022-10-22 Thread Enjoys Math via Digitalmars-d-learn

__MWE Code:__
```
module DlangForumsMWE;

import std.stdio;
import std.algorithm.mutation;

int main()
{
   //string[] tokens = userSID.output.split!isWhite;
   //writeln("tokens = ", tokens);

   auto tokens = ["SID", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "",
  "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "",
  "", "", "", 
"S-1-5-21-3823976785-3597194045-4221507747-1779", "", "", "", "", 
"", "", "", ""];


   writeln("Before:\n", tokens);

   writeln();
   tokens = tokens.remove!(x => x == "");
   writeln("After:\n", tokens);

   readln();
   return 0;
}
```

__Outputs:__
```
Before:
["SID", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "S-1-5-21-3823976785-3597194045-4221507747-1779", "", "", "", 
"", "", "", "", ""]


After:
["SID", "S-1-5-21-3823976785-3597194045-4221507747-1779"]
```




Re: Real simple question... for good programmers

2022-10-22 Thread Ali Çehreli via Digitalmars-d-learn

On 10/22/22 14:53, WhatMeWorry wrote:
>
>
> string[] tokens = userSID.output.split!isWhite;
> writeln("tokens = ", tokens);

Could you please show minimal compilable code that demonstrates the 
issue. I spent some time with some guesses but failed (to get my code to 
compile with std.array.split).


Ali

P.S. Sorry for also sending email.


Re: Real simple question... for good programmers

2022-10-22 Thread Enjoys Math via Digitalmars-d-learn

On Saturday, 22 October 2022 at 21:53:05 UTC, WhatMeWorry wrote:



string[] tokens = userSID.output.split!isWhite;
writeln("tokens = ", tokens); 

tokens = ["SID", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", 
"S-1-5-21-3823976785-3597194045-4221507747-1779", "", "", "", 
"", "", "", "", ""]	



Is there a clever way that I can discard all the extra null 
strings in the resultant string array?


I've been playing with isControl, whitespace, etc. Ready to rip 
my hair out.




Why not `strip`?  Works on ranges:
https://dlang.org/phobos/std_algorithm_mutation.html#.strip


Real simple question... for good programmers

2022-10-22 Thread WhatMeWorry via Digitalmars-d-learn




string[] tokens = userSID.output.split!isWhite;
writeln("tokens = ", tokens); 

tokens = ["SID", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "S-1-5-21-3823976785-3597194045-4221507747-1779", "", 
"", "", "", "", "", "", ""]	



Is there a clever way that I can discard all the extra null 
strings in the resultant string array?


I've been playing with isControl, whitespace, etc. Ready to rip 
my hair out.