Подсчет количества строк во всех текстовых файлах внутри одной папки

Задача, конечно, весьма экзотическая, но тем не менее легко решаемая в несколько строк:

import std.algorithm;
import std.file;
import std.path;
import std.range;
import std.stdio;
import std.string;

void main()
{
    dirEntries(<путь к папке>, SpanMode.shallow)
                            .filter!(a => a.isFile)
                            .map!(a => (cast(string) std.file.read(a)))
                            .map!(a => a.splitLines)
                            .map!(a => a.length)
                            .sum
                            .writeln;
}

В этом рецепте используется «точечный стиль» (он же UFCS — Unified Function Call Syntax, унифицированный стиль вызова функций), когда поток данных проходит через ряд преобразований следующих друг за другом. Сначала с помощью dirEntries получаем список того, что находиться в папке (перечисление SpanMode.shallow указывает на небольшую глубину поиска содержимого), затем выделяем из списка только те имена, которые соотвествуют файлам, считываем каждый файл в строку и разделяем его на строки, после чего считаем длины полученных строк, суммируем и выводим результат.
Что действительно удивительно, так это то, что не потребовалось никаких переменных и при этом решение достаточно аккуратное и легко читаемое.

Добавить комментарий