FreeBASIC マニュアルのトップに戻る

FreeBASIC LEN

目次→実行時ライブラリー参考→文字列関数LEN←オリジナル・サイト

LEN 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい


式やデータ型の長さを返します。
渡辺注:Shift_JIS のソース・コード(.bas ファイル)で、Shift_JIS の全角半角を、扱うことができる、KLen を追加しています。

構文:
declare function Len ( byref expression as string ) as integer
declare function Len ( byref expression as zstring ) as integer
declare function Len ( byref expression as wstring ) as integer

declare operator Len ( byref expression as datatype ) as datatype
declare function Len ( datatype ) as integer

用法:
result = Len( expression )
または
result = Len ( DataType )

パラメタ:
expression
表現(どの型でもかまいません)。
datatype
データ型 (DataType)。

戻り値:
expression または DataType (およびfbcバージョン >= 1.08 の UDTのデータフィールド)のサイズをバイト単位で返します。

記述:
Len は、expression か、DataTypeの長さを、バイト表現で返します。

1番目の形式では、expression の形式が、String(文字列) か、WSTRING か、ZSTRING
なら、文字列の長さが、文字数で返されます。???バイト表現で、返される???渡辺注
それ以外の場合は、expression の型のサイズが、バイト表現で、返されます。

2番目の形式では、datatype が、ZSTRING か、WSTRINGの場合は、ASCIIかユニコードの文字サイズが、それぞれ返されます。
datatype が、String(文字列) なら、文字列記述子型のサイズが、返されます。

fbc バージョン < 1.08の場合:指定された名前空間の変数に、名前空間の名前接頭辞を使ってアクセスする時は、Len への引数を括弧で囲んで、式として見えるようにし強制ます。
たとえば、Len((namespace_name.variable))

同じ範囲に、ともに同じ名前を持っているユーザ定義型と変数の両方があれば、ユーザ定義型が、変数より優先されます。
Len が、ユーザ定義型ではなく、変数を対象とすることを保証するためには、それを式とみなすことを強制するために、Len に対する引数を括弧で囲んでください。 Len((変数)) のようにです。

Len 単項 operator は、ユーザー定義型で多重定義できます。

例 1:ソース・コード(.bas ファイル)は、Shift_JIS で保存

Dim Japanese As WString * 20

Declare Function KLen (mojiretsu As String) As Integer

Japanese = "今日は、世界!"

Print Len("hello world"), KLen("hello world")        '戻り値 "11" と "11"
Print Len(Integer)                                   '戻り値 " 4"
Print Len("今日は、世界!"), KLen("今日は、世界!")  '戻り値 "11" と "7"
Print Len(Japanese), KLen(Japanese)                  '戻り値 "11" と "7"

Type xyz
    a As Integer
    b As Integer
End Type

Print Len(xyz)               '戻り値 "8"
Sleep


Function KLen (mojiretsu As String) As Integer
    Dim i As Integer
    Dim cCode As Integer
    Dim Result As Integer

    Result = 0

    For i = 1 To Len(mojiretsu)
        cCode = Asc(Mid(mojiretsu, i, 1))
        If (cCode >= &h81 And cCode <= &h9F) Or (cCode >= &hE0 And cCode <= &hFF) Then 'コードが2バイト文字の範囲なら
            i = i + 1
        End If
        Result = Result + 1
    Next i
    KLen = Result
End Function



例 2:ソース・コード(.bas ファイル)は、Shift_JIS で保存した場合と UNICODE で保存した場合で、文字定数でコーディングした部分の Len の値が変わります。
Print で、Space を追加する点に注意
注意:FbEdit の最新バージョン(1.0.7.6c)では、UNICODE のファイルを保存すると、不要な文字が入るバグが有ります。
このため、UNICODE のコードを扱う場合は、FbEdit バージョン(1.0.7.4)か、FreeBasic IDE-poseidonFB か、FreeBasic IUP_FB_EDITOR を使って下さい。

Dim Japanese As WString * 20
Dim mojiretsu As WString * 100

Width 50, 10 '横幅を50桁に狭めます

Japanese = "今日は、世界!"
mojiretsu = "、-K2011年11月06日(曜日Sun.)"

Print Len("hello world"), "hello world"                                         '戻り値 "11"
Print Len(Integer)                                                              '戻り値 " 4"
Print Len("今日は、世界!"), "今日は、世界!" & Space(Len("今日は、世界!"))    '戻り値 UNICODE:"7"、ShiftJIS"14"
Print Len(WStr("今日は、世界!")), "今日は、世界!" & Space(Len("今日は、世界!")) '戻り値 " 7"
Print Len(Japanese), Japanese & Space(Len(Japanese))                            '戻り値 " 7"
Print Len(mojiretsu), mojiretsu & Space(Len(mojiretsu))                         '戻り値 "22"

Type xyz
    a As Integer
    b As Integer
End Type

Print Len(xyz)               '戻り値 "8"

Print "何かキーを押して下さい。" & Space(Len("何かキーを押して下さい。"))
Sleep


注:日本語 Windows 標準設定の、コマンド プロンプトの「ラスターフォント(Raster font ビットマップ・フォント)」では、Print で、ユニコードの文字を表示しようとすると、半角ベースの幅しか確保しません。このため、全角の文字を含む文字列を表示すると、右端が欠落します。
 上の例のコードでは、文字数だけ、空白を、Space で追加して、表示させる幅をかせいでいます。
 ユニコード のソース・コード(.bas ファイル)で、WString の全角文字の Print を補助する、ユーザ定義関数 Expand もあります。

コマンド プロンプトのタイトルバーを右クリックしてプロパティを表示  コマンド プロンプトのタイトルバーを右クリックしてプロパティを表示させて、右画面のように、フォントを、「MS ゴシック」に変更すれば、プログラムで細工しなくても、素の print で全角文字列を表示できます。
 これも、2ちゃんねるの、「デフォルトの名無し」さんに教えていただきました。


バージョン:
方言差:

QBからの違い:

参照:

文字コード判定のサンプル(VB6)
http://homepage2.nifty.com/nonnon/SoftSample/SampleModJUDG.html
文字列関数
http://afsoft.jp/program/p07n.html

文字列関数に戻ります。
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2021-10-13 05:55:39
日本語翻訳:WATANABE Makoto、原文著作者:SysOp

ホームページのトップに戻る

表示-非営利-継承