@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

日本語入り文字列の位置

投稿者投稿内容
あび
ベテラン
会議室デビュー日: 2004/07/29
投稿数: 59
投稿日時: 2005-04-19 13:38
固定長のレコードで、特定位置に日本語が入っています。
その位置(**カラムから**カラム)は、固定なのですが、文字数が最大に満たないい場合は、半角のスペースが右に埋まっています。
日本語以降のデータ位置は、どのように指定したらいいのでしょうか?
VBでは、以下のように実装していました。
Data = CLng(StrConv(MidB(StrConv(strRec, vbFromUnicode), 106, 7), vbUnicode))
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-04-19 13:53
こんにちは、じゃんぬ です。

引用:

日本語以降のデータ位置は、どのように指定したらいいのでしょうか?
VBでは、以下のように実装していました。
Data = CLng(StrConv(MidB(StrConv(strRec, vbFromUnicode), 106, 7), vbUnicode))



こういうことでしょうか?

全角文字と半角文字を判別する



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
あび
ベテラン
会議室デビュー日: 2004/07/29
投稿数: 59
投稿日時: 2005-04-19 14:00
直接的にやりたいことは、日本語1文字を、2バイトと数えたいと言うことです。
Rec.SubString等で、指定する開始位置とか、長さは、バイトでなくて、文字数でカウントしますよね。
TomScissors
ベテラン
会議室デビュー日: 2003/06/05
投稿数: 79
投稿日時: 2005-04-19 14:20
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3977&forum=7
検索すると他にもバイト関連が結構Hitします。
これだ!という大正解はまだ出ていなかったような気がしますね。
あび
ベテラン
会議室デビュー日: 2004/07/29
投稿数: 59
投稿日時: 2005-04-19 14:37
TomScissorsさん、情報ありがとうございました。
今回は、日本語が入っているカラムが決まっているので、半角スペース2文字を全角スペース1文字に変換してから、以下のようにやることにしました。

Data = CInt(StrConv(Rec, VbStrConv.Narrow).Substring(開始バイト位置 - 日本語の文字数, 取得する文字数))



Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-04-19 19:24
 なんかよう意味がわからんが、なんとなく余分なスペースを取り除きたい、ということのように思えるが、Trimすれば両端のスペースがなくなるんだけど、それで良かったのでは?

 VBではこうしていました、と、コードを出してコードを読ませるのではなく、日本語で書けないかなぁ?それとも、普段からプログラミング言語で会話しているのだろうか?

_________________
あび
ベテラン
会議室デビュー日: 2004/07/29
投稿数: 59
投稿日時: 2005-04-20 08:37
説明不足で申しわけありません。
やりたかった事を再度説明しときます。

全角文字がある固定長レコードのデータを取得する時の問題です。

例えば、1バイト目から10バイト目まで全角文字が最大5文字、11バイト目から半角の文字が入っています。
この、11バイト目からの文字を取得したい場合、前の全角文字が5文字埋まっていれば、SubString(5,*)で、取得できます。
しかし、10バイトの中に、数未定の半角文字(今回の場合、スペース)が混ざっている場合、文字数の取得が正しく出来ないということです。


NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-04-20 09:57
固定長という前提であれば、各項目のバイト数が決まっているはずなので、
SJISの全角文字の真ん中でぶった切られるという事も無いはずです。
そうであれば、System.Text.Encodingを利用する例としてTomScissorsさんが
参照先として提示しているスレッドの方法が適当かと思います。
_________________
「伝える」とは「人に云う」と書く。
http://d.hatena.ne.jp/NAL-6295/

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