0.15.1 Reader/Writer

Try using streamDelimiter with a Writer.Allocating:

const std = @import("std");

pub fn main() !void {
    var alloc = std.heap.DebugAllocator(.{}).init;
    defer _ = alloc.deinit();

    const gpa = alloc.allocator();

    var buf: [1024 * 1024]u8 = undefined;
    var reader = std.fs.File.stdin().reader(&buf);

    var line_writer = std.Io.Writer.Allocating.init(gpa);
    defer line_writer.deinit();

    while (reader.interface.streamDelimiter(&line_writer.writer, '\n')) |_| {
        const line = line_writer.written();
        std.debug.print("{s}\n", .{line});
        line_writer.clearRetainingCapacity(); // empty the line buffer
        reader.interface.toss(1); // skip the newline
    } else |err| if (err != error.EndOfStream) return err;
}

3 Likes