October 04

What am I missing?

import std;

void main() {
    struct DateRem {
        Date date;
        string rem;
        string toString() const => text(date.toSimpleString, " ", rem);
    }
    DateRem[] daterem;
    data
        .splitter('\n')
        .filter!(l => l.length && l[0].isDigit)
        .each!((l) {
            auto parts=l
                   	.splitter[0..3]
                	.to!(int[]);
            if (parts.length==3) {
                daterem~=DateRem(Date(parts[2],parts[1],parts[0]),
                            l.splitter[3..$].join(" "));
	        }
        });
	daterem.each!writeln;
}

auto data="04 10 2023 17:28, not much
30 9 2023 21:08, very little";
October 04

On Wednesday, 4 October 2023 at 08:11:12 UTC, Joel wrote:

>

What am I missing?

Splitter returns a forward range so you can't slice the result. You can use take() and drop() instead. Also, converting a string range to int[] doesn't seem to work, but I don't know if it should. Here is a version that works:

import std;

void main() {
    struct DateRem {
        Date date;
        string rem;
        string toString() const => text(date.toSimpleString, " ", rem);
    }
    DateRem[] daterem;
    data
        .splitter('\n')
        .filter!(l => l.length && l[0].isDigit)
        .each!((l) {
            auto parts=l
                   	.splitter
                	.take(3)
                	.map!(to!int)
                	.array;
            if (parts.length==3) {
                daterem~=DateRem(Date(parts[2],parts[1],parts[0]),
                            l.splitter.drop(3).join(" "));
	        }
        });
	daterem.each!writeln;
}

auto data="04 10 2023 17:28, not much
30 9 2023 21:08, very little";