- PR -

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

投稿者投稿内容
Taito
常連さん
会議室デビュー日: 2005/07/21
投稿数: 43
投稿日時: 2005-09-12 12:01
VB.NETで開発中です。
あるデータをMSSQLから取り込み、テキストファイルに書き込む処理を
行なっています。
テキストファイルは、1レコード1行とし、各項目固定長ですので、
1レコードも固定長になる必要があります。
(テキストファイルから先は、別のアプリケーションで使用するため)

現在は、各項目を
Microsoft.VisualBasic.Left(dr.Item("vendor"), 12).PadRight(12)

Lset(dr.Item("vendor"), 12)
といった書き方で、それらをつなぎ合わせ、1レコード分づつ、
テキストファイルに書き込んでいますが、これだと各項目に
全角文字が入った場合におかしくなります。

VB6まではLeftBという関数がありましたが、
VB.NETの場合、色々調べましたが、お手上げ状態です;
LENに関しては結構ありましたが。
良い対処方法がございましたら、アドバイスをお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-12 12:08
こんにちは、じゃんぬ です。

引用:

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

VB6まではLeftBという関数がありましたが、
VB.NETの場合、色々調べましたが、お手上げ状態です;


System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount()
とのあわせ技をした自作メソッドを書きましょう。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-12 12:18
すいません、嘘つきました。
GetByteCount じゃあないです。(どこを斜め読みしたのか... orz)

コード:

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


直書きしているので、未検証です... (今、環境ないもので...)


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

Taitoさんの書き込み (2005-09-12 12:01) より:
現在は、各項目を
Microsoft.VisualBasic.Left(dr.Item("vendor"), 12).PadRight(12)

Lset(dr.Item("vendor"), 12)
といった書き方で、それらをつなぎ合わせ、1レコード分づつ、
テキストファイルに書き込んでいますが、これだと各項目に
全角文字が入った場合におかしくなります。



ども、らいと申します。

私自身、VB.NETは発売当初にちょっと触った程度なのでアレですが、
確か、下のコードでよかった記憶があります。
(例の該当部分のみです)
コード:
Microsoft.VisualBasic.Strings.Left(dr.Item("vendor"), 12).PadRight(12)


たぶん。おそらく。きっと。

違ってたらごめんなさい。m(_ _)m

# あぁ、やっぱ今まで.NET敬遠してたけど、
# やんなくちゃだめかなぁ。
らい
大ベテラン
会議室デビュー日: 2005/08/02
投稿数: 159
お住まい・勤務地: 東京都と千葉県のさかいめ
投稿日時: 2005-09-12 14:10
引用:

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





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

なので、一応情報ソースを。
http://www.bcap.co.jp/hanafusa/index.html
このページの「VB.NET関係」→「VB6.0→VB.NETへ移行」を選択すれば、
いろいろと載っているページへ行きます。

ではでは。
Taito
常連さん
会議室デビュー日: 2005/07/21
投稿数: 43
投稿日時: 2005-09-12 14:27
引用:

じゃんぬねっとさんの書き込み (2005-09-12 12:18) より:
すいません、嘘つきました。
GetByteCount じゃあないです。(どこを斜め読みしたのか... orz)

直書きしているので、未検証です... (今、環境ないもので...)



じゃんぬねっとさん、
早々のアドバイスありがとうございます。
関数、試してみているところです。また、報告します。
嘘つきなんて言わないで下さい。アドバイス、大変うれしいですから。
Taito
常連さん
会議室デビュー日: 2005/07/21
投稿数: 43
投稿日時: 2005-09-12 14:35
引用:

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

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

なので、一応情報ソースを。
http://www.bcap.co.jp/hanafusa/index.html
このページの「VB.NET関係」→「VB6.0→VB.NETへ移行」を選択すれば、
いろいろと載っているページへ行きます。

ではでは。



らいさん、アドバイスありがとうございます。
早速、String追加してみましたが、残念ながら変わりませんでした。
もうちょっと調べてみます。
.NETはVB5や6と勝手が違うので、コーディングにすごく時間が
かかってしまっています。
これを乗り越えれば、次からは随分違うと思うんですが…。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 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


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

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