- - PR -
日本語入り文字列の位置
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-04-19 13:38
固定長のレコードで、特定位置に日本語が入っています。
その位置(**カラムから**カラム)は、固定なのですが、文字数が最大に満たないい場合は、半角のスペースが右に埋まっています。 日本語以降のデータ位置は、どのように指定したらいいのでしょうか? VBでは、以下のように実装していました。 Data = CLng(StrConv(MidB(StrConv(strRec, vbFromUnicode), 106, 7), vbUnicode)) | ||||
|
投稿日時: 2005-04-19 13:53
こんにちは、じゃんぬ です。
こういうことでしょうか? 全角文字と半角文字を判別する _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-04-19 14:00
直接的にやりたいことは、日本語1文字を、2バイトと数えたいと言うことです。
Rec.SubString等で、指定する開始位置とか、長さは、バイトでなくて、文字数でカウントしますよね。 | ||||
|
投稿日時: 2005-04-19 14:20
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3977&forum=7
検索すると他にもバイト関連が結構Hitします。 これだ!という大正解はまだ出ていなかったような気がしますね。 | ||||
|
投稿日時: 2005-04-19 14:37
TomScissorsさん、情報ありがとうございました。
今回は、日本語が入っているカラムが決まっているので、半角スペース2文字を全角スペース1文字に変換してから、以下のようにやることにしました。 Data = CInt(StrConv(Rec, VbStrConv.Narrow).Substring(開始バイト位置 - 日本語の文字数, 取得する文字数)) | ||||
|
投稿日時: 2005-04-19 19:24
なんかよう意味がわからんが、なんとなく余分なスペースを取り除きたい、ということのように思えるが、Trimすれば両端のスペースがなくなるんだけど、それで良かったのでは?
VBではこうしていました、と、コードを出してコードを読ませるのではなく、日本語で書けないかなぁ?それとも、普段からプログラミング言語で会話しているのだろうか? _________________ | ||||
|
投稿日時: 2005-04-20 08:37
説明不足で申しわけありません。
やりたかった事を再度説明しときます。 全角文字がある固定長レコードのデータを取得する時の問題です。 例えば、1バイト目から10バイト目まで全角文字が最大5文字、11バイト目から半角の文字が入っています。 この、11バイト目からの文字を取得したい場合、前の全角文字が5文字埋まっていれば、SubString(5,*)で、取得できます。 しかし、10バイトの中に、数未定の半角文字(今回の場合、スペース)が混ざっている場合、文字数の取得が正しく出来ないということです。 | ||||
|
投稿日時: 2005-04-20 09:57
固定長という前提であれば、各項目のバイト数が決まっているはずなので、
SJISの全角文字の真ん中でぶった切られるという事も無いはずです。 そうであれば、System.Text.Encodingを利用する例としてTomScissorsさんが 参照先として提示しているスレッドの方法が適当かと思います。 _________________ 「伝える」とは「人に云う」と書く。 http://d.hatena.ne.jp/NAL-6295/ |
1|2|3
次のページへ»