Filling an array at compile time
Anonymouse
zorael at gmail.com
Wed Feb 9 10:01:15 UTC 2022
On Wednesday, 9 February 2022 at 08:12:52 UTC, Vindex wrote:
> Will the loop (foreach) run at compile time? How can I make it
> work at compile time?
>
> ```
> import std.csv, std.stdio;
>
> alias Record = Tuple!(string, string, string);
>
> immutable string[][] table;
>
> shared static this() {
> string csvText = import("file.csv");
> foreach (record; csvReader!Record(csvText)) {
> table ~= [record[0], record[1], record[2]];
> }
> }
>
> void main() {
> writeln(table):
> }
> ```
I would do this.
```
import std;
alias Record = Tuple!(string, string, string);
static immutable string[][] table = () {
string[][] table;
string csvText = import("file.csv");
foreach (record; csvReader!Record(csvText)) {
table ~= [record[0], record[1], record[2]];
}
return table;
}();
pragma(msg, table); // Available at compile-time
void main() {
writeln(table);
}
```
And then `-J{path}` to tell the compiler where to find `file.csv`.
```
dmd -J. csv.d
```
More information about the Digitalmars-d-learn
mailing list