メモの日々


2021年08月20日(金) [長年日記]

[c++] メンバ関数の修飾子の順序

C++でメンバ関数に修飾子としてconstとnoexceptを付与するとき、どちらを先に書けばいいのかをメモ。

を参考にすると、const noexceptの順序が正しいようだ。overrideはさらにその後。

struct A
{
    virtual void f() const noexcept {}
};

struct B : A
{
    void f() const noexcept override {}
};

2021年08月10日(火) [長年日記]

[life] toto当せんした(9)

前回メモした後、100円BIGで5等を3回当せんしている。900円、900円、200円。

そして、第1250回と1251回で連続当せんしていた。5等と3等で890円と10190円。3等(2つ外し)で一万円なので厳しい。1251回は1試合中止になっていて当せん確率が上がっていたようだ。


2021年07月30日(金) [長年日記]

[howto][unix][shell] 行数カウント(2)

テキストファイル群の行数カウントについて復習。

  • dir1とdir2配下の拡張子が.cppと.hのファイルの行数を数える

ものとする。

行数の合計だけわかればいい場合

以前にメモしている通り、findでファイルパス一覧を得てそれをcatでくっつけてwcへ渡せばできる。

$ find dir1 dir2 -type f -name '*.cpp' -o -name '*.h' | xargs cat | wc -l

ファイル毎の行数も知りたい場合

ファイルごとの行数を得るにはwcへファイルパス一覧を渡す必要がある。一覧はxargsで渡せるが、ファイル数が多いとwc呼び出しが複数回に分かれてしまい合計を得られなくなる。

wcには --files0-from というオプションがあり、これを使えばファイルパス一覧を標準入力から取得できてxargsが不要になってうまくいくようになる。--files0-from を使うためにfind側でも -print0 を指定する必要があって、そうするとファイルパターンの指定を括弧で囲う必要がでてきて少し不格好になる。

$ find dir1 dir2 -type f \( -name '*.cpp' -o -name '*.h' \) -print0 | wc -l --files0-from -

ファイルパターンの指定を簡潔に書くにはfindの -regex オプションを使い正規表現で書く手がある。ただ、デフォルトだと正規表現内に多量のエスケープが必要になり分かりにくくなるので、-regextype オプションで posix-egrep を指定した方がよさそう。

$ find dir1 dir2 -type f -regextype posix-egrep -regex '.*\.(cpp|h)' -print0 | wc -l --files0-from -

2021年07月15日(木) [長年日記]

[vim] ファイル末尾の改行を削除する

デフォルトの設定だとVimはファイルの末尾に改行を付与する。この改行を削除しようとしたがなかなかうまくいかなかったのでメモ。

ファイル末尾の改行を削除する方法

:set nofixeol noeol

とすればよい。

eolオプションはファイル末尾に改行が付いているかどうかを表すオプション。ファイル読み込み時にeolかnoeolかが自動的にセットされる。 noeolをセットして保存するだけでファイル末尾の改行が削除されればわかりやすいが、デフォルトの設定ではそうはならない。eolオプションの状態を保存時に反映するにはfixeolオプションをオフにする必要がある。

fixeolオプションはバージョン7.4.785で追加されたもののようだ。

vim-jpの上のissue(とても長い)を見ていて存在を知った。

binaryオプションを使うのはうまくいかないケースがある

検索するとbinaryオプションをnoeolと同時に設定する方法がよくみつかるのではじめはこの方法を使っていた。

しかし、この方法だと

  • ファイルの改行コードがLFに変わってしまう
  • ファイルのBomが削除されてしまう

という問題があった。

binaryではなくnofixeolを使う方がいい。


2021年06月29日(火) [長年日記]

[windows] Wordファイルを保存できなかった

Word 2016で、ファイルを保存した後でWordを終了しようとすると

画像の説明

~に対する変更を保存しますか?

[保存しない] をクリックした場合でも、このファイルの最新のコピーが一時的に保存されます。

というダイアログが表示された。ここで「保存」を選ぶと

ファイル エラーが発生しました。

というダイアログが表示されて保存されず、「保存しない」を選ぶと保存されずに終了する。

始めに「ファイルを保存した後で」と書いているが、このときにはエラーは表示されないが実際には保存されていない。なので、結局何をしても変更を保存できない状態になってしまった。

色々試すと、変更履歴の記録を有効にして特定の数式を追加したときにこの状態になるようだった。仕方がないので、当該数式の追加については変更履歴を残さないようにしてみたら保存できるようになった。