- PR -

文字列をバイト単位で切り分けたい。

投稿者投稿内容
にのっち
会議室デビュー日: 2004/01/18
投稿数: 8
投稿日時: 2004-01-18 11:15
VB.net 2003で開発しています。

文字列をバイト単位で切り分けたいのですが、
昔あったMidB()関数のようなものは、ないのでしょうか。
ご存知の方いらっしゃいましたら、教えていただけないでしょうか。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-01-18 11:40
諸農です。
引用:

にのっちさんの書き込み (2004-01-18 11:15) より:

文字列をバイト単位で切り分けたいのですが、



文字通り、バイト単位にするのでしたら

Encoding.GetBytes()

を使います。

文字列を文字配列として各文字にアクセスするのでしたら
String.Charsプロパティを利用します。

ではでは(^^)/

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
にのっち
会議室デビュー日: 2004/01/18
投稿数: 8
投稿日時: 2004-01-18 12:51
ありがとうございます。

Encoding.GetBytes()として、文字列をバイト配列に取得して、
全角文字と半角文字の区別ってどうすればよいのでしょう。

やりたいこととしては、
"1234512345アイウエオあいうえお"という文字列があったとして、
8バイト目から5バイトの文字列⇒"23"(4は捨てる)
20バイト目から5バイトの文字列⇒"オあい"
というふうに取りたいのです。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-01-18 13:52
諸農です。

引用:

にのっちさんの書き込み (2004-01-18 12:51) より:

Encoding.GetBytes()として、文字列をバイト配列に取得して、
全角文字と半角文字の区別ってどうすればよいのでしょう。



なぜ、バイト配列に変換する必要があるのでしょうか??

引用:

やりたいこととしては、
"1234512345アイウエオあいうえお"という文字列があったとして、
8バイト目から5バイトの文字列⇒"23"(4は捨てる)
20バイト目から5バイトの文字列⇒"オあい"
というふうに取りたいのです。



8バイト目を決めるルールがどういったものかわかりませんが、
String.Substring()を使えば、バイト位置ではなく、
文字位置と文字列長で切り出すことが出来ますよ。

ではでは(^^)/


--追加捕捉--
MidBをSDKで検索したら
「Visual Basic 言語の概念」
プログラミング要素のサポートに関する変更の概要
ms-help://MS.NETFrameworkSDKv1.1.JA/vblr7net/html/vaconProgrammingElementsChangesInVB7.htm

として、「Mid ステートメント」になったようですけど、
こっちは使えそうですか?

私はVBもVB.NETもわからないので。。(^_^;

_________________
諸農和岳
Powered by Borland Delphi/C++Builder & Microsoft VS.NET

[ メッセージ編集済み 編集者: Jubei 編集日時 2004-01-18 13:58 ]
にのっち
会議室デビュー日: 2004/01/18
投稿数: 8
投稿日時: 2004-01-18 16:06
諸農さん

String.Substring()だと、何文字目から何文字分としてしか切り出せないですよね。
何バイト目から何バイト分の文字列を取りたいので、
結局文字列を頭から回して、ASCIIコードに変換し、1バイト文字か2バイト文字かを
判断して、バイト数分の文字列を取ることにしました。
(あんまりよい方法とは思えないんですけど。)

もしももっとよい方法ご存知の方は教えてください。

Midステートメントは、文字変換で文字列切り出しとは違うようでした。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-01-18 18:17
諸農です。
病院に行ってて遅くなりました。

引用:

String.Substring()だと、何文字目から何文字分としてしか切り出せないですよね。



そうです。

引用:

"1234512345アイウエオあいうえお"という文字列があったとして、
8バイト目から5バイトの文字列⇒"23"(4は捨てる)



5バイトを取得しようとして、文字列操作を行っても、
結果として取得するのは4バイト分の2文字なんですよね?

最終の形を、個々の要素を文字として認識できる文字配列にしたいのでしたら、
SubString()でも充分要件を満たしているような気はするんですけどねぇ。。

もしかして、切り出したい位置や文字列長が、
文字位置や文字数では指定できないって前提なんでしょうか?
そうであるなら、仕方が無いとは思いますが。

引用:

Midステートメントは、文字変換で文字列切り出しとは違うようでした。



使えませんでしたか(^_^;
無駄な情報だったようですね。すみませんでした。

_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
にのっち
会議室デビュー日: 2004/01/18
投稿数: 8
投稿日時: 2004-01-18 18:28
何度も教えていただきありがとうございます。

やりたいことを具体的にいうと、
固定長のCSVファイルからDBにレコードを取り込むために、
何バイト目から何バイトの文字列という形で区切りたいのです。
その文字列には半角文字・全角文字が混在するので、
何文字分という切り出し方ではいけないのです。

というわけで、仕方ない…という結論でしょうか。
アティ
ベテラン
会議室デビュー日: 2003/08/14
投稿数: 91
お住まい・勤務地: KANAGAWA
投稿日時: 2004-01-18 19:00
ども、久しぶりに書き込むアティです。
引用:

にのっちさんの書き込み (2004-01-18 18:28) より:
やりたいことを具体的にいうと、
固定長のCSVファイルからDBにレコードを取り込むために、
何バイト目から何バイトの文字列という形で区切りたいのです。
その文字列には半角文字・全角文字が混在するので、
何文字分という切り出し方ではいけないのです。


これって、CSVファイルなんですよね?
でしたら、カンマで区切ればいいのではないんでしょうか?
あ、もしかして、カンマで区切った文字列の一部を読み込むってことですか?
それだったら、仕方がないですね。

<関係ない話>
ところで、ちょっと見ない間に俺の立てた「会社の不満」スレッドが
どこかへ逝ってしまったのですが、どこへいったのだろう?
も、もしかして、削除されてしまいました?!
</関係ない話>

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