C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: vb2005での文字数のカウントについて


(過去ログ 55 を表示中)

[トピック内 14 記事 (1 - 14 表示)]  << 0 >>

■31294 / inTopicNo.1)  vb2005での文字数のカウントについて
  
□投稿者/ lino. (1回)-(2009/01/20(Tue) 11:46:32)

分類:[VB.NET/VB2005 以降] 

vb2005でメモ帳もどきを作っているのですが、そこにワードのような文字数をカウントさせる機能をつけたいと思っています。
それで、Len関数を使って、

Dim moji As String
moji = TextBox1.Text
ToolStripStatusLabel2.Text = "文字数:" & Len(moji)

として、テキストボックスに入力された文字数は確かにカウントされ表示されるのですが、
これではEnterとスペースもカウントされてしまいます。
ですからこの2つだけカウントされないようにするにはどうすればいいですか。
何かアドヴァイスをお願いします。
引用返信 編集キー/
■31295 / inTopicNo.2)  Re[1]: vb2005での文字数のカウントについて
□投稿者/ επιστημη (1540回)-(2009/01/20(Tue) 11:50:15)
επιστημη さんの Web サイト
> として、テキストボックスに入力された文字数は確かにカウントされ表示されるのですが、
> これではEnterとスペースもカウントされてしまいます。
> ですからこの2つだけカウントされないようにするにはどうすればいいですか。

「Enterとスペースの数を勘定してさっぴけばいいじゃん」と素で思った...引っ掛け問題? ^^;

引用返信 編集キー/
■31298 / inTopicNo.3)  Re[2]: vb2005での文字数のカウントについて
□投稿者/ .SHO (543回)-(2009/01/20(Tue) 12:24:32)
No31295 (επιστημη さん) に返信

> 「Enterとスペースの数を勘定してさっぴけばいいじゃん」と素で思った...引っ掛け問題? ^^;

つーことで、Len使わないで自分でカウントすればいいじゃん...って引っ掛かっちゃった?
引用返信 編集キー/
■31300 / inTopicNo.4)  Re[3]: vb2005での文字数のカウントについて
□投稿者/ まさる (50回)-(2009/01/20(Tue) 12:35:19)
まさる さんの Web サイト
2009/01/20(Tue) 12:36:45 編集(投稿者)

mojiのスペースと改行を空文字("")にReplaceしてからLenで文字数カウントとか。

#個人的には、文字列長はLen関数でなく、String.Lengthプロパティを使って欲しい。
引用返信 編集キー/
■31301 / inTopicNo.5)  Re[3]: vb2005での文字数のカウントについて
□投稿者/ やじゅ (913回)-(2009/01/20(Tue) 12:36:49)
やじゅ さんの Web サイト
2009/01/20(Tue) 12:38:28 編集(投稿者)

No31298 (.SHO さん) に返信
> ■No31295 (επιστημη さん) に返信
>
>>「Enterとスペースの数を勘定してさっぴけばいいじゃん」と素で思った...引っ掛け問題? ^^;
>
> つーことで、Len使わないで自分でカウントすればいいじゃん...って引っ掛かっちゃった?

えー、Enterとスペースを空文字に置換してLen使えばいいじゃん...って引っ掛かっちゃった?


追記:あー、まさるさんが先に回答・・・
引用返信 編集キー/
■31303 / inTopicNo.6)  Re[4]: vb2005での文字数のカウントについて
□投稿者/ biac (20回)-(2009/01/20(Tue) 12:49:17)
biac さんの Web サイト
No31301 (やじゅ さん) に返信
>>
> >>「Enterとスペースの数を勘定してさっぴけばいいじゃん」と素で思った...引っ掛け問題? ^^;
>>
>>つーことで、Len使わないで自分でカウントすればいいじゃん...って引っ掛かっちゃった? 
> 
> えー、Enterとスペースを空文字に置換してLen使えばいいじゃん...って引っ掛かっちゃった?

あー、みんな引っ掛かっちゃってますね〜 f(^^;

たぶん、コレ↓が欲しいのではないかと f(^^;

Dim contents As String() = Me.TextBox1.Lines
Dim count As Integer = 0
For Each l As String In contents
    count += l.Length
Next
Call MessageBox.Show(count.ToString("0文字です"))

引用返信 編集キー/
■31304 / inTopicNo.7)  Re[1]: vb2005での文字数のカウントについて
□投稿者/ 魔界の仮面弁士 (967回)-(2009/01/20(Tue) 12:49:21)
No31294 (lino. さん) に返信
> ワードのような文字数をカウントさせる機能
Word だと『Yes, U-CAN.』は
 単語数=2
 文字数(スペースを含めない)=10
 文字数(スペースを含める)=11
と表示されますね。


> moji = TextBox1.Text
> ToolStripStatusLabel2.Text = "文字数:" & Len(moji)
Len(TextBox1.Text) よりも、TextBox1.TextLength の方がスマートかと。

 Label1.Text = CStr(TextBox1.TextLength)


> として、テキストボックスに入力された文字数は
Word 2007 に合わせた「文字数」なら、JIS2004 対策も必要かと。
(これだけでは、今回の問題の解決策にはなりませんけれども)

 'Imports System.Globalization
 Dim si As New StringInfo(TextBox1.Text)
 Label2.Text = CStr(si.LengthInTextElements)


> これではEnterとスペースもカウントされてしまいます。
> ですからこの2つだけカウントされないようにするにはどうすればいいですか。
余計な文字を潰してしまうとか。

 Dim s As String = TextBox1.Text
 s = s.Replace(" ", "")
 's = s.Replace(ControlChars.NewLine, "")
 s = s.Replace(ControlChars.Cr, "")
 s = s.Replace(ControlChars.Lf, "")
 Label3.Text = CStr(s.Length)
引用返信 編集キー/
■31305 / inTopicNo.8)  Re[5]: vb2005での文字数のカウントについて
□投稿者/ 魔界の仮面弁士 (968回)-(2009/01/20(Tue) 12:52:53)
No31303 (biac さん) に返信
>>>> これではEnterとスペースもカウントされてしまいます。
> たぶん、コレ↓が欲しいのではないかと f(^^;

その実装だと、「スペース」がカウントされてしまう気が。
引用返信 編集キー/
■31306 / inTopicNo.9)  Re[1]: vb2005での文字数のカウントについて
□投稿者/ みきぬ (338回)-(2009/01/20(Tue) 12:54:43)
思ったこと2点。

1. カウントされたくないスペース文字って、具体的には何ですか?
例えば、正規表現でいうところの \s でいいのかしら?

2. うまく文字数がカウントされたとして、処理速度は大丈夫かなあ?
ToolStripStatusLabel に表示させてるところから察するに、文字数をリアルタイムで表示させたいように見えるけど、やめたほうがいいかも。
引用返信 編集キー/
■31309 / inTopicNo.10)  Re[6]: vb2005での文字数のカウントについて
□投稿者/ biac (21回)-(2009/01/20(Tue) 13:37:04)
biac さんの Web サイト
No31305 (魔界の仮面弁士 さん) に返信
> その実装だと、「スペース」がカウントされてしまう気が。

ぅわは、 引っかかったのはわたしだったか〜〜〜っ orz

てことは、 まじめに全部見るしかないっすね。
リベンジついでに、 JIS 2004 対応 f(^^;

Dim count As Integer = 0
Dim charEnum As TextElementEnumerator = StringInfo.GetTextElementEnumerator(Me.TextBox1.Text)
While (charEnum.MoveNext())
    Dim te As String = charEnum.GetTextElement()
    Dim uc As UnicodeCategory = Char.GetUnicodeCategory(te, 0)  ' TextElement の最初のコードだけ見ればいい (たぶん)
    Select Case uc
        Case UnicodeCategory.SpaceSeparator, UnicodeCategory.SpacingCombiningMark
            ' (do nothing --- 空白系のコード)
        Case UnicodeCategory.Control, UnicodeCategory.Format, UnicodeCategory.LineSeparator, UnicodeCategory.ParagraphSeparator
            ' (do nothing --- 制御系のコード)
        Case Else
            count += 1
    End Select
End While

Call MessageBox.Show(count.ToString("0文字です"))

※ UNICODE カテゴリの Case、 真面目に考えてないです。 すんません f(^^;;;

で。 これ、 TextChanged イベントとかでやったら、 えらい遅くなるような気がします。

引用返信 編集キー/
■31311 / inTopicNo.11)  Re[2]: vb2005での文字数のカウントについて
□投稿者/ επιστημη (1542回)-(2009/01/20(Tue) 13:41:06)
επιστημη さんの Web サイト
> TextChanged イベントとかでやったら、 えらい遅くなるような気がします。

優先順位のひくぅいスレッド起こして裏でコソコソ勘定すんでしょね ^^;

引用返信 編集キー/
■31349 / inTopicNo.12)  Re[3]: vb2005での文字数のカウントについて
□投稿者/ lino. (2回)-(2009/01/20(Tue) 16:56:36)
……。やばい。分かんなくなってきた
えと、どうしてもワードっぽくリアルタイムで文字数をカウントしてほしいのですが。速度はそりゃ速めの方がいいですがぜいたく言ってられないので……
あと、例えばテキストボックスに、

hello hello

と入力されていたら「文字数:11」でなく「文字数:10」って表示してほしいのです。スペースは抜きで。
と同時に

hello hello
vb2005

だったら「文字数:18」でなく「文字数:16」って表示してほしいのです。何か知りませんが今のあの状態ではenterは「2」にカウントされてしまうので。


えと……。すみません説明力不足で。みなさん返信ありがとうございます。

引用返信 編集キー/
■31351 / inTopicNo.13)  Re[4]: vb2005での文字数のカウントについて
□投稿者/ επιστημη (1552回)-(2009/01/20(Tue) 17:01:49)
επιστημη さんの Web サイト
> hello hello
>
> と入力されていたら「文字数:11」でなく「文字数:10」って表示してほしいのです。スペースは抜きで。

いやだから、ループくるくる回して
「数えたくない文字を除外して勘定する」
あるいは
「文字の総数-数えたくない文字数 を求める」
が皆さんの統一意見ですが。

なんかわからんとこがあるですか?

引用返信 編集キー/
■31382 / inTopicNo.14)  Re[5]: vb2005での文字数のカウントについて
□投稿者/ lino. (3回)-(2009/01/21(Wed) 09:20:23)
No31351 (επιστημη さん) に返信

> いやだから、ループくるくる回して
> 「数えたくない文字を除外して勘定する」
> あるいは
> 「文字の総数-数えたくない文字数 を求める」
> が皆さんの統一意見ですが。
>
> なんかわからんとこがあるですか?
>



すみません。そういうことだったんですね。
やってみたら解決しました。みなさんありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -