mirror of
https://codeberg.org/andyscott/ziglings.git
synced 2024-11-09 11:40:46 -05:00
106 & 107
This commit is contained in:
parent
69bc9a0723
commit
223fc79e44
5 changed files with 100 additions and 20 deletions
|
@ -1123,7 +1123,14 @@ const exercises = [_]Exercise{
|
||||||
},
|
},
|
||||||
.{
|
.{
|
||||||
.main_file = "106_files.zig",
|
.main_file = "106_files.zig",
|
||||||
.output = "Succefully wrote 18 bytes.",
|
.output = "Successfully wrote 18 bytes.",
|
||||||
|
},
|
||||||
|
.{
|
||||||
|
.main_file = "107_files2.zig",
|
||||||
|
.output =
|
||||||
|
\\AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||||
|
\\Successfully Read 18 byte: It's zigling time!
|
||||||
|
,
|
||||||
},
|
},
|
||||||
.{
|
.{
|
||||||
.main_file = "999_the_end.zig",
|
.main_file = "999_the_end.zig",
|
||||||
|
|
|
@ -35,9 +35,7 @@ pub fn main() !void {
|
||||||
// by doing nothing
|
// by doing nothing
|
||||||
//
|
//
|
||||||
// we want to catch error.PathAlreadyExists and do nothing
|
// we want to catch error.PathAlreadyExists and do nothing
|
||||||
??? => {
|
??? => {},
|
||||||
???;
|
|
||||||
},
|
|
||||||
// if is any other unexpected error we just propagate it through
|
// if is any other unexpected error we just propagate it through
|
||||||
else => return e,
|
else => return e,
|
||||||
};
|
};
|
||||||
|
@ -46,7 +44,8 @@ pub fn main() !void {
|
||||||
// wait a minute
|
// wait a minute
|
||||||
// opening a directory might fail!
|
// opening a directory might fail!
|
||||||
// what should we do here?
|
// what should we do here?
|
||||||
const output_dir: std.fs.Dir = cwd.openDir("output", .{});
|
var output_dir: std.fs.Dir = cwd.openDir("output", .{});
|
||||||
|
defer output_dir.close();
|
||||||
|
|
||||||
// we try to open the file `zigling.txt`,
|
// we try to open the file `zigling.txt`,
|
||||||
// and propagate the error up if there are any errors
|
// and propagate the error up if there are any errors
|
||||||
|
@ -60,7 +59,7 @@ pub fn main() !void {
|
||||||
|
|
||||||
// !you are not allow to switch this two lines to before file closing line!
|
// !you are not allow to switch this two lines to before file closing line!
|
||||||
const byte_written = try file.write("It's zigling time!");
|
const byte_written = try file.write("It's zigling time!");
|
||||||
std.debug.print("Succefully wrote {} bytes.\n", .{byte_written});
|
std.debug.print("Successfully wrote {} bytes.\n", .{byte_written});
|
||||||
}
|
}
|
||||||
// to check if you actually write to the file, you can either,
|
// to check if you actually write to the file, you can either,
|
||||||
// 1. open the file on your text editor, or
|
// 1. open the file on your text editor, or
|
||||||
|
|
52
exercises/107_files2.zig
Normal file
52
exercises/107_files2.zig
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
//
|
||||||
|
// Prerequisite :
|
||||||
|
// - exercise/106_files.zig, or
|
||||||
|
// - create a file {project_root}/output/zigling.txt
|
||||||
|
// with content `It's zigling time!`(18 byte total)
|
||||||
|
//
|
||||||
|
// Now there no point in writing to a file if we don't read from it am I right?
|
||||||
|
// let's wrote a program to read the content of the file that we just created.
|
||||||
|
//
|
||||||
|
// I am assuming you've created the appropriate files for this to work.
|
||||||
|
//
|
||||||
|
// Alright, bud, lean in close here's the game plan.
|
||||||
|
// - First, we open the {project_root}/output/ directory
|
||||||
|
// - Secondly, we open file `zigling.txt` in that directory
|
||||||
|
// - then, we initalize an array of character with all letter 'A', and print it
|
||||||
|
// - Afte that, we read the content of the file to the array
|
||||||
|
// - Finally, we print out the read content
|
||||||
|
|
||||||
|
const std = @import("std");
|
||||||
|
|
||||||
|
pub fn main() !void {
|
||||||
|
// Get the current working directory
|
||||||
|
const cwd = std.fs.cwd();
|
||||||
|
|
||||||
|
// try to open ./output assuming you did your 106_files exercise
|
||||||
|
var output_dir = try cwd.openDir("output", .{});
|
||||||
|
defer output_dir.close();
|
||||||
|
|
||||||
|
// try to open the file
|
||||||
|
const file = try output_dir.openFile("zigling.txt", .{});
|
||||||
|
defer file.close();
|
||||||
|
|
||||||
|
// initalize an array of u8 with all letter 'A'.
|
||||||
|
// we need to pick a size of the array, 64 seems like a good number.
|
||||||
|
// fix the initalization below
|
||||||
|
var content = ['A']*64;
|
||||||
|
// this should print out : `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`
|
||||||
|
std.debug.print("{s}\n", .{content});
|
||||||
|
|
||||||
|
// okay, seem like threat of violence is not the answer in this case
|
||||||
|
// can you go here to find a way to read the content ?
|
||||||
|
// https://ziglang.org/documentation/master/std/#std.fs.File
|
||||||
|
// hint: you might find two answer that are both vaild in this case
|
||||||
|
const byte_read = zig_read_the_file_or_i_will_fight_you(&content);
|
||||||
|
|
||||||
|
// Woah, too screamy, I know you're excited for zigling time but tone it down a bit
|
||||||
|
// Can you print only what we read from the file ?
|
||||||
|
std.debug.print("Successfully Read {} byte: {s}\n", .{
|
||||||
|
byte_read,
|
||||||
|
content, // change this line only
|
||||||
|
});
|
||||||
|
}
|
|
@ -1,28 +1,24 @@
|
||||||
--- exercises/106_files.zig
|
--- exercises/106_files.zig 2024-03-27 16:36:44.593077000 +0800
|
||||||
+++ answers/106_files.zig
|
+++ answers/106_files.zig 2024-03-27 16:36:31.548155100 +0800
|
||||||
@@ -35,9 +35,9 @@ pub fn main() !void {
|
@@ -35,7 +35,7 @@
|
||||||
// by doing nothing
|
// by doing nothing
|
||||||
//
|
//
|
||||||
// we want to catch error.PathAlreadyExists and do nothing
|
// we want to catch error.PathAlreadyExists and do nothing
|
||||||
- ??? => {
|
- ??? => {},
|
||||||
- ???;
|
+ error.PathAlreadyExists => {},
|
||||||
- },
|
|
||||||
+ error.PathAlreadyExists => {
|
|
||||||
+ return;
|
|
||||||
+ },
|
|
||||||
// if is any other unexpected error we just propagate it through
|
// if is any other unexpected error we just propagate it through
|
||||||
else => return e,
|
else => return e,
|
||||||
};
|
};
|
||||||
@@ -46,7 +46,7 @@ pub fn main() !void {
|
@@ -44,7 +44,7 @@
|
||||||
// wait a minute
|
// wait a minute
|
||||||
// opening a directory might fail!
|
// opening a directory might fail!
|
||||||
// what should we do here?
|
// what should we do here?
|
||||||
- const output_dir: std.fs.Dir = cwd.openDir("output", .{});
|
- var output_dir: std.fs.Dir = cwd.openDir("output", .{});
|
||||||
+ const output_dir: std.fs.Dir = try cwd.openDir("output", .{});
|
+ var output_dir: std.fs.Dir = try cwd.openDir("output", .{});
|
||||||
|
defer output_dir.close();
|
||||||
|
|
||||||
// we try to open the file `zigling.txt`,
|
// we try to open the file `zigling.txt`,
|
||||||
// and propagate the error up if there are any errors
|
@@ -55,7 +55,7 @@
|
||||||
@@ -56,7 +56,7 @@ pub fn main() !void {
|
|
||||||
// but here we are not yet done writing to the file
|
// but here we are not yet done writing to the file
|
||||||
// if only there are a keyword in zig that
|
// if only there are a keyword in zig that
|
||||||
// allow you "defer" code execute to the end of scope...
|
// allow you "defer" code execute to the end of scope...
|
||||||
|
|
26
patches/patches/107_files2.patch
Normal file
26
patches/patches/107_files2.patch
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
--- exercises/107_files2.zig 2024-03-27 16:36:56.733062700 +0800
|
||||||
|
+++ answers/107_files2.zig 2024-03-27 16:36:52.894505100 +0800
|
||||||
|
@@ -33,7 +33,7 @@
|
||||||
|
// initalize an array of u8 with all letter 'A'.
|
||||||
|
// we need to pick a size of the array, 64 seems like a good number.
|
||||||
|
// fix the initalization below
|
||||||
|
- var content = ['A']*64;
|
||||||
|
+ var content = [_]u8{'A'} ** 64;
|
||||||
|
// this should print out : `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`
|
||||||
|
std.debug.print("{s}\n", .{content});
|
||||||
|
|
||||||
|
@@ -41,12 +41,12 @@
|
||||||
|
// can you go here to find a way to read the content ?
|
||||||
|
// https://ziglang.org/documentation/master/std/#std.fs.File
|
||||||
|
// hint: you might find two answer that are both vaild in this case
|
||||||
|
- const byte_read = zig_read_the_file_or_i_will_fight_you(&content);
|
||||||
|
+ const byte_read = try file.read(&content);
|
||||||
|
|
||||||
|
// Woah, too screamy, I know you're excited for zigling time but tone it down a bit
|
||||||
|
// Can you print only what we read from the file ?
|
||||||
|
std.debug.print("Successfully Read {} byte: {s}\n", .{
|
||||||
|
byte_read,
|
||||||
|
- content, // change this line only
|
||||||
|
+ content[0..byte_read], // change this line only
|
||||||
|
});
|
||||||
|
}
|
Loading…
Reference in a new issue