私はエンジニアでありたい

インプットしたら、アウトプット

近況報告

約2ヶ月ぶりの更新です。

 

タイトルにもある通り、近況報告です。

 

最近は、

プログラム行数カウンターのリファクタリングをしています。

(今もリファクタリング中です)

 

会社のコミュニティで、有志で集まりソフト開発をするグループがあるのですが、

そちらにプログラム行数カウンターを共有し、レビューしていただき、

リファクタリングしている最中です。

 

GitHub(プライベートリポジトリ)で進捗管理しており、

週1で集まって毎回気づいたら1時間ぐらい経過してる、みたいな感じなので、

充実感はすごいのですが、結果的にブログは疎かになっていました...。

 

それで、、、リファクタリングがひと段落するまで、

ブログ更新は当面難しそうなので、一旦そのことはこちらに記載しておこうと思い、

ブログ書いています。すみません。

 

リファクタリングがひと段落しましたら、

リファクタリングしたプログラム行数カウンターの記事を書こうと思います。

なぜなら、、、公開してた自分のコードが相当クソコードだったので、

少しはまともになったものを改めて出したいためです。

 

ひとまず、近況報告でした。

今日はここまで。

 

 

 

プログラム行数カウンターを作る#8

夏休みに入りました。
10連休、有意義に過ごしていきたいものです。
(初日はスプラトゥーン8時間ぐらいやって疲れました。)

 

さて、プログラム行数カウンターの話。
CSVファイルに実行結果(プログラムの行数等)を記録する処理ができました。

CSVファイルに実行結果を書き込む

実現方法としては、

  • fopenで記録用CSVファイルをappendモードで開く
  • fprintfで実行結果(行数カウント等)を記録用CSVファイルに書き込む
  • (fcloseで記録用CSVファイルを閉じる)

CSV出力に取り組んだ当初、
何も方針がなかったので最初からググったわけですが、やることは単純でした。

記録用CSVファイル(result.csv)をappendモードで開いているので、programRowCounter.exeを実行する度に、下記のように記録が追記されていきます。

記録用CSVファイルに書き込まれた実行結果

逆に、writeモードでfopenしてしまうと、
毎回result.csvの中身を空にしてしまい、記録を蓄積していくことができません。
(蓄積できないことにハマり、fopenの仕様を確認しました。)

 

というわけで、プログラム行数カウンターができました。

 

Pythonコメント対応だったり、他にも課題はありますが、
今後使っていく中で随時アップデートしていこうと思います。

 

今日はここまで。

プログラム行数カウンターを作る#7

void型関数なのに、関数名 getFileExtension なんすか?www
m9(^Д^)プギャー

 

職場の友人たちと、ラーメンを食べながらした会話の一部始終です。
(ブログ読んでるよ、ってことも、言ってくれました)

 

2点、伝えたいことがあります。

1点目、ブログを読んでくれていて、ありがとう。

2点目、コードレビューしてくれて、ありがとう。

 

というわけで、

今回は前回ブログに書いた、💩コードをリファクタリングしていきます。

リファクタリング対象は、以下2点です。

  • void getFileExtension( FILE_DATA* )
  • void getFileType( FILE_DATA* )

 

リファクタリング前は、以下の通り。

リファクタリング

リファクタリング後は、以下の通り。

リファクタリング

リファクタリングに伴い、main関数内での処理も変化しました。

リファクタリング後のmain関数の一部

前後の差分としては、

  1. 関数名から処理結果が連想できるように、各関数の処理を変更しました。
  2. fileDataの各要素への値のコピーは、main関数で実施するようにしました。

関数の役割が明確になったので、関数を呼ぶ側としては扱いやすくなったと思えます。

 

今日はここまで。

プログラム行数カウンターを作る#6

今日は有給休暇をいただきました。体調不良とかではないです。
仕事から離れて、ボォーっとする時間を定期的に作りたい人間なんですよね。

ボォーっとする時間を作りたい、とは言いつつも、
一日なにもしない、というのは気が引けたので、ブログ書こうってなりました。

 

前回に引き続き、出来たこと以下2点について、順番に話していこうと思います。

  • programRowCounter.exeに渡されたファイルの種類を判定
  • programRowCounter.exeを実行した時刻を取得

(programRowConter.exeは、以降、実行ファイルと呼んでいきます)

 

 

 

実行ファイルに渡されたファイルの種類判定は、ファイル拡張子から判断しています。


具体的な処理の流れとしては、
getFileExtension関数で、拡張子(文字列)を取得し、
getFileType関数で、取得した拡張子からファイルの種類を判定しています。

 

って、言い切るのがシンプルなんですが、
関数の処理内容を詳しくみると、実はちょっと違います。(ブログ書いてて気づく)

ファイルの種類判定のための関数

getFileExtension関数は、実行ファイルに渡したファイルの拡張子(文字列)を取得して、
取得した拡張子を、FILE_DATA構造体のfextensionに登録しています。

getFileType関数は、fextensionに登録されている拡張子(文字列)を参照して、
予め実行ファイルに渡されることが想定されているファイルの種類に該当すれば、
そのプログラミング言語の名前(文字列)をFILE_DATA構造体のftypeに登録しています。

FILE_DATA構造体

まぁ、、、要するに、
関数名と実際の処理内容が厳密には一致していない、ってことです。

getFileExtension関数がgetFileType関数の中でしか使われない保証があれば、
getFileType関数を呼べば、呼び出し側はファイルの種類が何かは分かります。
まだいい気がします。

ただ、getFileExtension関数が単体で呼ばれると、エラー処理に引っかからなければ、
結果的に呼び出し側は何も得られません。
(ファイル拡張子を取得できると関数名に記されているにも関わらず。)

 

反省ですね。
当たり前ですが、関数名と処理内容が一致しているかの確認は重要。

 

 

 

続いては、programRowCounter.exeを実行した時刻を取得の処理です。

現在時刻を取得する関数

C言語の標準ライブラリにtime.hがあり、そちらをベースに実装しました。
コメントに書いたこと以外は、特に追及することはない気がします。

 

 

 

とりあえず、進捗についての話はこんな感じです。
ここまでで、CSVファイルに記録する情報は出そろったように思えます。

 

 

 

次回は、これまで取得した情報をCSVに記録する処理部分について書いていきます。
とはいえ、、、まだCSV出力の処理部分は何も実装もしていないので、
次のブログ更新はいつになるかな…。

 

今日はここまで。

プログラム行数カウンターを作る#5

私、アラサーなんですが、先週の土日は合計27時間ぐらい寝れたんですよね。

いい休日でした。

 

前回、以下3点が出来ましたって書いていました。

  • 複数行コメントが判別できる処理を追加
  • programRowCounter.exeに渡されたファイルの種類を判定
  • programRowCounter.exeを実行した時刻を取得

順番に話していこうと思います。

 

複数行コメントの判別処理は、大まかなに説明すると、bool型のmultiCommentFlagが
multiCommentFlag == true の間は、読み込んだ行を複数行コメントとして認識します
って感じです。

複数行コメント判別の処理


multiCommentFlagは、falseで初期化しておきます。
いつ、trueになるのか。
読み込んだ行を格納する文字列配列strの、str[0]とstr[1]の値を見て判定しています。

multiCommentFlagがfalseに戻るときも、基本的に考え方は同じで、
str[0]とstr[1]の値を見て判定しています。

ただ、上記の考え方だと、
/* comment */ のようなコメントも複数行コメントとして判定されてしまうので、
106行目~111行目のような処理を加えています。

反省ですが、ブログ書きながら、”あ、このパターン来たらダメじゃん”って
思いついた例がありましたが、今回はスルーします。
コメント記述としてありえそうなパターンですが、
普段の自分が書いたりするパターンじゃなかったので気づけなかったです…。

 

反省を残しつつ、ひとまず、複数行コメント処理はこんな感じで終わり。

 

 

 

それで、

  • programRowCounter.exeに渡されたファイルの種類を判定
  • programRowCounter.exeを実行した時刻を取得

についても同記事に記載しようと思いましたが、
記事の量が倍ぐらいになりそうなので、次回にします。

今日はここまで。安定の午前3時。

プログラム行数カウンターを作る#4

四月からは週一更新を目指したい。
って117日前に書いてた人が今このブログを更新しています。
約4ヶ月ぶりのブログ更新です。やれやれです。

 

現在、7月24日(月) 午前3時でございます。
なぜ、こんなにもブログ更新に時間が空いてしまったのか。
まぁ、、、年度が変わって、忙しかったのが正直なところです。
本業(組み込み開発)だったり、Adobeクリエイティブカレッジだったり。

 

とはいえ、何だかんだで、ここに戻ってきた。偉い。

 

時間も時間なので、ソースコードの画像貼って、

あれこれ話すのは週末にしようと思います。

 

ひとまず、進捗としては以下の通り

  • 複数行コメントが判別できる処理を追加
  • programRowCounter.exeに渡されたファイルの種類を判定
  • programRowCounter.exeを実行した時刻を取得

test.txtを与えた際の実行結果

programRowCounter.exeに渡したtest.txt

ぶっちゃけ、、、複数行コメントの判別はテストが不十分なので、
抜け穴は多いだろうな、って自覚はあります。

 

ただ、あまりに変な書き方の複数行コメントは最初から考慮しませんでした。
そもそも、それってコメントの書き方としてどうなん?って話に私はなる。

 

"こういう書き方される複数行コメントは、対処できるようにしよう" を念頭に、
ソースコード上ではロジック組み立てました。

 

冒頭にも書いた通り、ソースコードを見ながらあれこれ話すのは、週末やります。
って、、、もう午前4時じゃん。

 

今日はここまで。

プログラム行数カウンターを作る#3

気づけば3月下旬。
前回の更新から3週間も期間が空いてしまった…。
四月からは週一更新を目指したい。

 

気を取り直して、ここからはプログラム行数カウンターのお話。

 

とりあえず、今のソースコードは画像の通り。

現状のソースコード_1

現状のソースコード_2

1枚目に変化は特になく、2枚目の処理部分で必要な変数定義が追加されたぐらい。

2枚目は、ちょいちょい処理を追加している途中。

 

まずは、読み込んだファイル(以降:プログラム)の行数をカウントする処理を実装中。

プログラムの行数カウント処理の進捗としては、

空白行 と  一行コメント は、ソースコードとしてカウントしないことはできた。

 

前提として、プログラムの行数に 空白行 や コメント行 は、含めないと決めていた。

ここでは、[ ソースコード = 空白行 や コメント行 以外の有効なコード ] としている。

 

試しに、以下のテストファイルをプログラム行数カウンターに与えてみた。

(テストファイルは、ただのテキストファイル)

テストファイル

そして、結果は以下の通り。

テストファイルを与えた結果

一応、空白行と一行コメントの判別はしてくれている。

テストファイルには18行目の表示はあるものの、

18行目はEOFなので、カウント対象外という仕様です。

 

次は、複数行コメントが判別できる処理を実装していく予定。

 

それで、、、この時点でいうのは完全に後出しジャンケンだけれども、

一旦プログラム行数カウンターが許容できるプログラミング言語は、

C/C++JavaScriptに限定しようと思う。

 

これらのプログラミング言語に対して正しく処理が行えれば、

以降Pythonとかにも対応していこうと思う。

(Pythonのコメント形式が上記の言語たちと異なることを後から知った...。)

 

今日はここまで。