0Pricing
Zig Academy · Урок

Чтение файлов и stdin

Передавайте входные данные в программу потоком.

«Чтение файлов и stdin» — бесплатный урок Zig Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Zig Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Zig Academy содержит 4 уроков всего.

Инструментам нужен ввод

Полезный CLI обычно что-нибудь читает: файл, имя которого вы указали, или текст, переданный ему через конвейер. Zig предоставляет понятные и явные способы сделать и то и другое. 📥

Откройте файл по пути

Используйте std.fs.cwd, чтобы получить текущий каталог, а затем openFile, чтобы открыть для чтения путь относительно него.

const file = try std.fs.cwd().openFile(path, .{});

Всегда закрывайте открытые ресурсы

Открытый файл — это ресурс, которым вы владеете. Сопоставьте открытие с defer file.close(), чтобы ресурс освобождался независимо от того, как завершается функция.

defer file.close();

Прочитайте весь файл

Чтобы загрузить всё содержимое сразу, вызовите readToEndAlloc, передав распределитель и ограничение размера. Функция возвращает байты в виде принадлежащего вам среза.

const data = try file.readToEndAlloc(a, 1024 * 1024);

Позже освободите байты

Возвращённый срез находится в куче, поэтому он принадлежит вам. Добавьте defer a.free(data), чтобы освободить буфер после завершения работы с ним.

defer a.free(data);

Ограничение размера служит защитой

Аргумент с максимальным числом байтов защищает от ситуации, когда огромный файл съедает всю память. Выберите ограничение, соответствующее реалистичному входу вашего инструмента.

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

Чтобы прочитать текст из конвейера, используйте std.io.getStdIn. Он возвращает файл так же, как если бы вы открыли его сами, поэтому применяются те же вызовы чтения.

const stdin = std.io.getStdIn();

Прочитайте весь stdin

Запросите у stdin средство чтения и вызовите readAllAlloc. Оно собирает всё переданное через конвейер до конца ввода в один принадлежащий вам срез.

const input = try stdin.reader().readAllAlloc(a, 1024 * 1024);

Читайте построчно

Для потоковой обработки readUntilDelimiterOrEof у средства чтения извлекает по одной строке в буфер и возвращает null, когда ввод заканчивается.

const line = try r.readUntilDelimiterOrEof(&buf, '\n');

Буферизуйте для скорости

Каждое необработанное чтение может быть системным вызовом. Оберните средство чтения в std.io.bufferedReader, чтобы объединить множество небольших чтений в меньшее число быстрых операций.

var br = std.io.bufferedReader(file.reader());

Файл или конвейер — код один и тот же

Поскольку и файл, и stdin предоставляют reader, логике разбора не важно, какой из них она получила. Это чистая архитектура, которую легко переиспользовать. ✨

Быстрая проверка

Вспомните, как превратить байты файла в данные, которые можно использовать.

Итоги

Вы открывали файлы с помощью openFile, читали их целиком или построчно, получали текст из stdin и освобождали каждый буфер. Ввод обработан. 🎯

Часто задаваемые вопросы

Урок «Чтение файлов и stdin» бесплатный?

Да — полный текст урока «Чтение файлов и stdin» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Zig Academy, подпишись на CoddyKit PRO. Курс Zig Academy содержит 4 уроков всего.

Чему я научусь в уроке «Чтение файлов и stdin»?

Передавайте входные данные в программу потоком. Ты практикуешь Zig Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Zig Academy?

Предыдущий опыт не требуется. Zig Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Чтение файлов и stdin»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Zig Academy?

Да. Каждый урок Zig Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Чтение аргументов командной строки
  2. Чтение файлов и stdin
  3. Запись вывода и коды завершения
  4. Упаковка и выпуск бинарного файла
← Назад к Zig Academy