AzLearn

تمرين إعادة البناء

Mini Grep

أعد كتابة برنامج Go يبحث في ملف باستخدام regexp.

go ~24 دقيقة متوسط
أعد بناء الكود Rebuild

هذا هو الكود. اكتبه بنفسك.

الكود المرجعي
package main

import (
	"bufio"
	"fmt"
	"os"
	"regexp"
	"strings"
)

func grep(pattern string, text string) ([]string, error) {
	re, err := regexp.Compile(pattern)
	if err != nil {
		return nil, err
	}

	var matches []string
	scanner := bufio.NewScanner(strings.NewReader(text))
	for lineNumber := 1; scanner.Scan(); lineNumber++ {
		line := scanner.Text()
		if re.MatchString(line) {
			matches = append(matches, fmt.Sprintf("%d:%s", lineNumber, line))
		}
	}
	return matches, scanner.Err()
}

func main() {
	text := `Go builds simple tools.
Typing code teaches patterns.
Great tools start small.`

	pattern := "tools?"
	if len(os.Args) > 1 {
		pattern = os.Args[1]
	}

	matches, err := grep(pattern, text)
	if err != nil {
		fmt.Println("error:", err)
		return
	}
	for _, match := range matches {
		fmt.Println(match)
	}
}
اكتب هنا