2008年1月24日木曜日

複数行文字列の行数を取得する(2)

FUJIさんのご指摘を受けて、HSP標準のnotemaxとほぼ同等の動作をするモジュール。

参考:複数行文字列の行数を取得する

// 行数取得モジュール
// 変数の型チェックは行っていないので注意
#module
// instr()を利用した行数の取得
#defcfunc get_lines_num1 var p1
    result = 0
    repeat strlen(p1)
        result++
        ins = instr(p1, cnt"\n")
        if ins == -1 : break
        continue cnt + ins + 2
    loop
    return result
// 正規表現を利用した行数の取得
#defcfunc get_lines_num2 var p1
    if vartype(com_regexp) != vartype("comobj") {
        // comオブジェクト型変数の初期化
        newcom com_regexp, "VBScript.RegExp"
        comres com_result
        com_regexp("Pattern") = "\\r\\n"
        com_regexp("Global") = 1
    }
    com_regexp->"Execute" p1
    result = com_result("Count") + 1    // 行数 = 改行の個数 + 1
    s = strmid(p1, -12)
    if s == "\n" | s == "" : result--   // 最後が空行ならその行をカウントしない
    return result
// notemaxを利用した行数の取得
#defcfunc get_lines_num3 var p1
    notesel p1
    result = notemax
    noteunsel
    return result
#global
    sdim s, 323
    s(0) = "Hot\nSoup\nProcessor"
    s(1) = "sample\nstrings\n"
    s(2) = ""
    foreach s
        mes get_lines_num1(s(cnt))
        mes get_lines_num2(s(cnt))
        mes get_lines_num3(s(cnt))
        mes "***"
    loop
    stop

4 件のコメント:

hiro さんのコメント...

はじめまして hiroと申します。
HSPメモ帳のリンクありがとうございます。
エントリーと関係の無いことで、すいませんが、当ブログでellerさんのブログをリンクしてもいいでしょうか?

hiro さんのコメント...

# 先ほどコメントをしたのですが、投稿失敗したようなので再投稿します。
# 重複でしたら、すいません。

HSPメモ帳のリンクありがとうございます。
こちらでも、リンクしたいのですがよろしいでしょうか?

eller さんのコメント...

hiroさん、はじめまして。ellerと申します。

リンクの件、ありがとうございます。
当サイトはリンクフリー&アンリンクフリーですので、ご自由にどうぞ。
こちらから張る時に連絡せずにすみませんでした。

hiro さんのコメント...

ありがとうございます。
こちらもリンクフリーですので、連絡無しでOKです。