- PR -

VB.NET 全角・半角でのLEFT関数

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-12 14:43
こんにちは、じゃんぬ です。

引用:

Taitoさんの書き込み (2005-09-12 14:27) より:

じゃんぬねっとさん、
早々のアドバイスありがとうございます。
関数、試してみているところです。また、報告します。
嘘つきなんて言わないで下さい。アドバイス、大変うれしいですから。


お気使い、ありがとうございます。(*_ _)
もちろん、嘘を付くつもりはなかったのですが、
回答が間違ってましたので... そういう意味です。(^-^;)

お礼といってはなんですが、文字化けに注意してください。
(2 バイト部分で前半のみ切れてしまった時の対応)


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
らい
大ベテラン
会議室デビュー日: 2005/08/02
投稿数: 159
お住まい・勤務地: 東京都と千葉県のさかいめ
投稿日時: 2005-09-12 15:34
引用:

じゃんぬねっとさんの書き込み (2005-09-12 14:37) より:
引用:

らいさんの書き込み (2005-09-12 14:10) より:

たぶん。おそらく。きっと。
違ってたらごめんなさい。m(_ _)m

引用:

コード:
Microsoft.VisualBasic.Strings.Left(dr.Item("vendor"), 12).PadRight(12)





自分で書いておいてなんですが、書き込みをしてから調べてました。
でも、コレに関する記述って少ないですね。
(VB6での「〜B」関数)


で、これは Left 関数であって、LeftB とは違うと思うのですが...
違ってたらごめんなさい。m(_ _)m



おぉぅ。
本当に違ってた。
って、ココにも書いてあるじゃん。
気づけよ、自分。orz
Taito
常連さん
会議室デビュー日: 2005/07/21
投稿数: 43
投稿日時: 2005-09-12 16:00
引用:

じゃんぬねっとさんの書き込み (2005-09-12 14:43) より:
こんにちは、じゃんぬ です。

お礼といってはなんですが、文字化けに注意してください。
(2 バイト部分で前半のみ切れてしまった時の対応)


コード:
Public Shared Function LeftByte(ByVal nTarget As String, ByVal iByteSize As Integer) As String
    Dim hEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("Shift-JIS")
    Dim bBytes    As Byte() = hEncoding.GetBytes(nTarget)

    Return hEncoding.GetString(bBytes, 0, iByteSize)
End Function



じゃんぬねっとさん

度々、ありがとうございます。
LeftBの時も、途中で切れて、文字化けしていたことありました。
気をつけます。というか、未だ、そこまで行き着けなくて、
先ほど、教えていただいた関数がエラーが出たので、
色々変更して試していたのですが、どうしても分からないので
教えていただけませんでしょうか?

Returnのところでエラーが出ます。
'System.ArgumentOutOfRangeException' のハンドルされていない例外が mscorlib.dll で発生しました。
追加情報 : インデックスおよびカウントはバッファ内の場所を参照しなければなりません。

ハンドルされていない例外 : System.ArgumentOutOfRangeException: インデックスおよびカウントはバッファ内の場所を参照しなければなりません。
パラメータ名 : bytes

他に宣言が必要なものとかあるのでしょうか?
葉瀬崎浩樹
大ベテラン
会議室デビュー日: 2005/06/28
投稿数: 115
お住まい・勤務地: 兵庫県
投稿日時: 2005-09-12 16:09
引用:

Taitoさんの書き込み (2005-09-12 16:00) より:
Returnのところでエラーが出ます。
'System.ArgumentOutOfRangeException' のハンドルされていない例外が mscorlib.dll で発生しました。
追加情報 : インデックスおよびカウントはバッファ内の場所を参照しなければなりません。



bBytesの配列上限を越えて、iByteSizeがアクセスしようとしているのでは?
Taito
常連さん
会議室デビュー日: 2005/07/21
投稿数: 43
投稿日時: 2005-09-12 16:22
引用:

葉瀬崎浩樹さんの書き込み (2005-09-12 16:09) より:
引用:

Taitoさんの書き込み (2005-09-12 16:00) より:
Returnのところでエラーが出ます。
'System.ArgumentOutOfRangeException' のハンドルされていない例外が mscorlib.dll で発生しました。
追加情報 : インデックスおよびカウントはバッファ内の場所を参照しなければなりません。



bBytesの配列上限を越えて、iByteSizeがアクセスしようとしているのでは?




葉瀬崎浩樹さん、
先ほど、確認しましたら、実際の文字列が12バイトしかなのに、35バイトに
しようとしていました。LeftByte(dr.Item("u_kikaku"),35)
12以下にしたら、エラーが出ませんでした。
文字列サイズのチェックも必要ですね…。

ありがとうございました。助かりました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-12 16:35
引用:

Taitoさんの書き込み (2005-09-12 16:22) より:

12以下にしたら、エラーが出ませんでした。
文字列サイズのチェックも必要ですね…。


あ、言っておくの忘れてましたね...
ただ、メソッド内に例外回避を記述するのは、
フレームワークな志向上、あまり宜しくはないので、
メソッド外で回避してあげてくださいね。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Taito
常連さん
会議室デビュー日: 2005/07/21
投稿数: 43
投稿日時: 2005-09-12 16:48
引用:

じゃんぬねっとさんの書き込み (2005-09-12 16:35) より:
引用:

Taitoさんの書き込み (2005-09-12 16:22) より:

12以下にしたら、エラーが出ませんでした。
文字列サイズのチェックも必要ですね…。


あ、言っておくの忘れてましたね...
ただ、メソッド内に例外回避を記述するのは、
フレームワークな志向上、あまり宜しくはないので、
メソッド外で回避してあげてくださいね。



じゃんぬねっとさん
伝授頂いた関数で、望む通りの動作するようになりました。
チェックも、関数の外で行ないました。
出力テキストファイルの幅がビシッ〜と揃って、うれしかったです。
文字化けチェックはまだですが、なんとかなりそうです。

じゃんぬねっとさん・らいさん・葉瀬崎浩樹さん
大変助かりました。ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)