Re: weird formattedRead

2021-04-09 Thread Ali Çehreli via Digitalmars-d-learn

On 4/9/21 11:17 AM, Berni44 wrote:

> I'm on reworking completely the docs of `std.format`.

Awesome! :)

Ali



Re: weird formattedRead

2021-04-09 Thread Berni44 via Digitalmars-d-learn

On Friday, 9 April 2021 at 16:11:26 UTC, Oleg B wrote:

valid '1/1/1': 0001-Jan-01 00:00:00 <<< see here

[...]

Is space a special char for `formattedRead` and it simple stop 
parse without throwing exception if not found space (that 
represented in fmt string)?

Have `formattedRead` any other special chars?
Or it's bug?


It's a (at least to me) known bug (I haven't taken the time to 
report it yet; found it a few days ago, when I reworked the 
docs). `formattedRead` treats space sometimes special and 
sometimes not, which (obviously) may lead to strange behavior, 
like it does here. If you like, you can [report this 
one](https://issues.dlang.org/enter_bug.cgi); I'll probably will 
care about it in a few weeks/months (I first want to fix the 
`formattedWrite` bugs and finish implementing formatting floating 
point numbers without calling `snprintf`.)


On Friday, 9 April 2021 at 16:39:30 UTC, Ali Çehreli wrote:
P.S. I can't check whether the D standard library documentation 
includes that information because the documentation looks very 
different and very skimpy to me at this time. There is nothing 
on format characters on formattedRead's documentation. (?)


When using the `stable` docs you still should get, what you are 
used to. But I guess, you used the `master` docs and looked at 
`formattedWrite` where the information used to be.


Since about three weeks I'm on reworking completely the docs of 
`std.format`. Before that, the module has been split in several 
submodules (package, read, write, specs). Meanwhile I moved the 
docs you know from `formattedWrite` to 
[package](https://dlang.org/phobos-prerelease/std_format.html) 
(but yet not reworked completely, because the review process 
takes some time and I try to verify everything I state in the new 
docs in the source code). For 
[`formattedRead`](https://dlang.org/phobos-prerelease/std_format_read.html#.formattedRead) and [reading in general](https://dlang.org/phobos-prerelease/std_format_read.html), the new docs are already finished. Feedback is welcome.




Re: weird formattedRead

2021-04-09 Thread frame via Digitalmars-d-learn

On Friday, 9 April 2021 at 16:11:26 UTC, Oleg B wrote:

Is space a special char for `formattedRead` and it simple stop 
parse without throwing exception if not found space (that 
represented in fmt string)?

Have `formattedRead` any other special chars?
Or it's bug?


I think it's a bug:

The char 0x20 is meant to be skipped till end of the string or a 
parseable char in the format string by the function 
readUpToNextSpec().


If the function found a whitespace in the input string, it's fine 
and skipped as long there is another whitespace char. But if the 
input string range is already done, it also does just nothing 
anymore. For other chars if would throw the 'Cannot find 
character' exception.



But the source declared this as "backwards compatibility":

```
string s = " 1.2 3.4 ";
double x, y, z;
assert(formattedRead(s, " %s %s %s ", , , ) == 2);
assert(s.empty);
assert(approxEqual(x, 1.2));
assert(approxEqual(y, 3.4));
assert(isNaN(z));
```

So it seems to be a desired behaviour.


Re: weird formattedRead

2021-04-09 Thread Ali Çehreli via Digitalmars-d-learn

On 4/9/21 9:11 AM, Oleg B wrote:

> Is space a special char for `formattedRead` and it simple stop parse
> without throwing exception if not found space

Yes: The space character means "zero or more white space".

Ali

P.S. I can't check whether the D standard library documentation includes 
that information because the documentation looks very different and very 
skimpy to me at this time. There is nothing on format characters on 
formattedRead's documentation. (?)




weird formattedRead

2021-04-09 Thread Oleg B via Digitalmars-d-learn
Hello, I have some doubts about working `formattedRead` with 
space chars.


Example:
```d
import std : formattedRead, DateTime, stderr, each;

DateTime parseDT(string str)
{
int d,mo,y, h,m,s;
formattedRead!"%d/%d/%d %d:%d:%d"(str, d,mo,y, h,m,s);
return DateTime(y,mo,d, h,m,s);
}

void tryParse(string s)
{
try
{
auto dt = parseDT(s);
stderr.writefln!"valid '%s': %s"(s, dt);
}
catch (Exception e)
stderr.writefln!"INVALID '%s': %s"(s, e.msg);
}

void main()
{
auto vs = [
"",
"1",
"1/1",
"1/1/1",
"1/1/1 1",
"1/1/1 1:1",
"1/1/1 1:1:1",
];
vs.each!tryParse;
}
```

outputs:

```
INVALID '': 0 is not a valid month of the year.
INVALID '1': parseToFormatSpec: Cannot find character '/' in the 
input string.
INVALID '1/1': parseToFormatSpec: Cannot find character '/' in 
the input string.

valid '1/1/1': 0001-Jan-01 00:00:00 <<< see here
INVALID '1/1/1 1': parseToFormatSpec: Cannot find character ':' 
in the input string.
INVALID '1/1/1 1:1': parseToFormatSpec: Cannot find character ':' 
in the input string.

valid '1/1/1 1:1:1': 0001-Jan-01 01:01:01
```

Is space a special char for `formattedRead` and it simple stop 
parse without throwing exception if not found space (that 
represented in fmt string)?

Have `formattedRead` any other special chars?
Or it's bug?