Skip to content

Commit 3d86a67

Browse files
authored
Merge pull request #91 from NuruProgramming/fh/add-ability-to-write-files
Fh/add ability to write files
2 parents 2e55c0c + 39741f4 commit 3d86a67

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

evaluator/builtins.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ var builtins = map[string]*object.Builtin{
9090

9191
file, err := os.ReadFile(filename)
9292
if err != nil {
93-
return &object.Error{Message: "Tumeshindwa kusoma faili"}
93+
return &object.Error{Message: "Tumeshindwa kusoma faili au faili halipo"}
9494
}
9595
return &object.File{Filename: filename, Content: string(file)}
9696
},

object/file.go

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package object
22

3+
import (
4+
"os"
5+
)
6+
37
type File struct {
48
Filename string
5-
Content string // To read the file
9+
Content string
610
}
711

812
func (f *File) Type() ObjectType { return FILE_OBJ }
@@ -11,6 +15,10 @@ func (f *File) Method(method string, args []Object) Object {
1115
switch method {
1216
case "soma":
1317
return f.read(args)
18+
case "andika":
19+
return f.write(args)
20+
case "ongeza":
21+
return f.append(args)
1422
}
1523
return nil
1624
}
@@ -21,3 +29,40 @@ func (f *File) read(args []Object) Object {
2129
}
2230
return &String{Value: f.Content}
2331
}
32+
33+
func (f *File) write(args []Object) Object {
34+
if len(args) != 1 {
35+
return newError("Samahani, tunahitaji Hoja 1, wewe umeweka %d", len(args))
36+
}
37+
content, ok := args[0].(*String)
38+
if !ok {
39+
return newError("Samahani, hoja lazima iwe Tungo")
40+
}
41+
err := os.WriteFile(f.Filename, []byte(content.Value), 0644)
42+
if err != nil {
43+
return newError("Hitilafu katika kuandika faili: %s", err.Error())
44+
}
45+
f.Content = content.Value
46+
return &Boolean{Value: true}
47+
}
48+
49+
func (f *File) append(args []Object) Object {
50+
if len(args) != 1 {
51+
return newError("Samahani, tunahitaji Hoja 1, wewe umeweka %d", len(args))
52+
}
53+
content, ok := args[0].(*String)
54+
if !ok {
55+
return newError("Samahani, hoja lazima iwe Tungo")
56+
}
57+
file, err := os.OpenFile(f.Filename, os.O_APPEND|os.O_WRONLY, 0644)
58+
if err != nil {
59+
return newError("Hitilafu katika kufungua faili: %s", err.Error())
60+
}
61+
defer file.Close()
62+
_, err = file.WriteString(content.Value)
63+
if err != nil {
64+
return newError("Hitilafu katika kuongeza kwa faili: %s", err.Error())
65+
}
66+
f.Content += content.Value
67+
return &Boolean{Value: true}
68+
}

0 commit comments

Comments
 (0)