0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

コマンドラインツールを作るのは難しそうなイメージがありましたが、案外簡単に作れてしまいました。

コード

main.go
package main

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

func main() {
	// コマンドライン引数の定義
	filename := flag.String("f", "", "検索対象のファイル名")
	word := flag.String("w", "", "検索する単語")
	flag.Parse()

	// 引数のバリデーション
	if *filename == "" || *word == "" {
		fmt.Println("使用方法: -f <ファイル名> -w <検索単語>")
		flag.PrintDefaults()
		os.Exit(1)
	}

	// ファイルを開く
	file, err := os.Open(*filename)
	if err != nil {
		fmt.Printf("ファイルを開けませんでした: %v\n", err)
		os.Exit(1)
	}
	defer file.Close()

	// 単語の出現回数をカウント
	scanner := bufio.NewScanner(file)
	count := 0
	for scanner.Scan() {
		count += strings.Count(strings.ToLower(scanner.Text()), strings.ToLower(*word))
	}

	if err := scanner.Err(); err != nil {
		fmt.Printf("ファイル読み込み中にエラーが発生しました: %v\n", err)
		os.Exit(1)
	}

	// 結果を表示
	fmt.Printf("ファイル '%s' 内の '%s' の出現回数: %d\n", *filename, *word, count)
}

サンプルファイル

test.txt
word
wordword
word&word
wrodword

動かしてみる

go run main.go -f test.txt -w word

ファイル 'test.txt' 内の 'word' の出現回数: 6

引数が正しくない場合

コマンドラインの使用方法やオプションの説明が表示されます。

go run main.go
                  
使用方法: program -f <ファイル名> -w <検索単語>
  -f string
        検索対象のファイル名
  -w string
        検索する単語
exit status 1
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?