Add ability to list all tasks along with line number. Add ability to delete task based on line number.

This commit is contained in:
dan
2025-10-21 10:05:33 -04:00
parent 4c58c672fb
commit 70f36c34c3

82
godo.go
View File

@@ -4,6 +4,7 @@ import (
"encoding/csv" "encoding/csv"
"fmt" "fmt"
"os" "os"
"strconv"
) )
func main() { func main() {
@@ -12,20 +13,29 @@ func main() {
fmt.Println("Use godo ? or help for the help menu") fmt.Println("Use godo ? or help for the help menu")
os.Exit(0) os.Exit(0)
} }
switch args[1] { switch args[1] {
case "?", "help": case "?", "help":
help() help()
case "a", "add": case "a", "add":
add(args[2]) add(args[2])
case "l", "list":
list()
case "d", "delete":
delete(args[2])
} }
} }
// List all available commands
func help() { func help() {
fmt.Println("?/help - help menu") fmt.Println("?/help - help menu")
fmt.Println("a/add - add new task") fmt.Println("a/add - add new task. Must be in quotations")
fmt.Println("l/list - add new task") fmt.Println("d/delete - delete task")
fmt.Println("l/list - list all tasks")
} }
// Add new task
func add(task string) { func add(task string) {
file, err := os.OpenFile("tasks.csv", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644) file, err := os.OpenFile("tasks.csv", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)
if err != nil { if err != nil {
@@ -40,3 +50,71 @@ func add(task string) {
taskWrite = append(taskWrite, task) taskWrite = append(taskWrite, task)
writer.Write(taskWrite) writer.Write(taskWrite)
} }
// List all current tasks
func list() {
file, err := os.Open("tasks.csv")
if err != nil {
fmt.Printf("Error: %v", err)
}
defer file.Close()
if err != nil {
fmt.Printf("Error: %v", err)
}
reader := csv.NewReader(file)
records, err := reader.ReadAll()
if err != nil {
fmt.Printf("Error: %v", err)
}
x := 1
for _, record := range records {
fmt.Printf("%x - %s\n", x, record[0])
x += 1
}
}
// Delete the requested task
func delete(task string) {
fileName := "tasks.csv"
// Convert arg to int
taskInt, err := strconv.Atoi(task)
if err != nil {
fmt.Println("error")
}
//open the task csv
file, err := os.Open(fileName)
if err != nil {
fmt.Printf("Error: %v", err)
}
defer file.Close()
if err != nil {
fmt.Printf("Error: %v", err)
}
//read the file
reader := csv.NewReader(file)
records, err := reader.ReadAll()
if err != nil {
fmt.Printf("Error: %v", err)
}
//close file and delete
file.Close()
os.Remove(fileName)
//check if the arg number is equal to the csv line number. If not pass it to the add function to readd it
x := 1
for _, record := range records {
if x != taskInt {
add(record[0])
}
x += 1
}
}