カンテラの光の下で

dNaga392's memorandom

【VBA】ワークシートを巡回する

ブックの全てのワークシートは Worksheets で呼ぶことができます。
この複数のワークシートに対して特定の操作をするために、
VBAの繰り返しステートメントの一つ For Each を用います。

    For Each ws In Worksheets
        ' ワークシートの名前をデバッグプリント
        Debug.Print wsMain.Name
    Next ws

ただし、C++などにある次のループまで処理をスキップする Continue 文は存在しません。 そのため、処理のスキップには GoTo 文を使います。

    For Each ws In Worksheets
        ' ワークシート main はスキップ
        If wsMain.Name = "main" Then
            GoTo Continue
        End If
        
        ' ワークシートの名前をデバッグプリント
        Debug.Print wsMain.Name
        
        Continue: ' GoTo でここまでスキップされる
    Next ws

参考

【Name】メタ構文変数

日本で使われるメタ構文変数の名には

hoge, piyo, fuga

等が挙げられます。

一方、英語圏では

foo, bar

といった変数名がよく使われています。

英語圏メタ構文変数の一つに "xyzzy" があります。
これは、ADVENTという1970年代のゲームにおける呪文が由来とされています。

"xyzzy" は離れた2点間を移動する呪文で、条件を満たしていないときには何も起こらないため
メタ構文変数に使われていると伝えられています。

xyzzy - Wikipedia

コロッサル・ケーブ・アドベンチャー - Wikipedia

【Doxygen】Doxygen Tips

コードドキュメントツールDoxygen がいい感じなので、
利用に際して気にすることを記します。

関数コールツリーの表示

関数コールツリーの表示は Topix "Dot" の "HAVE_DOT" にチェックを入れて、
"CALL_GRAPH", "CALLER_GRAPH" にチェックを入れることで可能となります。

ツール "dot" はグラフ可視化ツール Graphviz の一部なので、 Graphviz をインストールしておく必要があります。

ShiftJISのコメントを表示する

ShiftJISのコメントの表示は、Topix "Input" の
"INPUT_ENCODING" に "CP932" を設定することで可能となります。
(CP932 は Windows で使用されている MS による ShiftJIS 拡張です。)

参考

【Qt】テキストファイルの行数を取得する

行数の数え上げはQTextStream::readLine()を用います。
以下は実際に読んだ行数を返す例です。

int countLine(QString filePath)
{
    int line_count=0;
    QFile file(filePath);
    file.open(QIODevice::ReadOnly); //| QIODevice::Text)
    QTextStream in(&file);
    while( !in.atEnd())
    {
        in.readLine();
        line_count++;
    }
    return line_count;
}

参考

Qt - How to count number of line in .txt file - Stack Overflow

【Qt】【QList】リストの中身を取り出す

QListの中の値を取得するにはメソッドat()やオペレーター[]を利用します。

それとは別に、QListの中の値を得て、QListから取り除くきたい。
そんなときはメソッドtakeAt()を用います。

先頭または最後に対して同様の操作をする場合は、
takeFirst(), takeLast()を用います。

以下はリストが空になるまで先頭から順に取り出す例です。

#include <QtCore>

void takeAtList()
{
    QList<QString> list;
    list << "A" << "B" << "C" << "D" << "E" << "F";
    while(list.size() > 0)
    {
        QString item = list.takeFirst();
        qDebug("%s, %d: item=[%s]", __FILE__, __LINE__, qPrintable(item));
    } // output "A", "B", "C", "D", "E", "F"
}

neobundleを導入する

neobundleが便利で自宅環境にも導入にしようとしたのですが、
思いがけないところで躓いたのでメモ。

つまずいた箇所は、

という箇所。これがないとNeoBundleInstallが失敗します。
しかもエラーメッセージなしなので、結構痛かった。

参考

【Qt】【QMessageBox】メッセージボックスからボタンを消す

メッセージボックスからボタンを消すにはメソッドsetStandardButtonsに0を渡してあげます。

QMessageBox m;
m.setStandardButtons(0);

ただ、クラスを作っても良いならQDialogを基底にQLabelを配置したダイアログを作成するのもありかも。

参考