- PR -

VBSでEUCコードをSJISコードへ変換したい

投稿者投稿内容
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-13 18:34
Daisukeさん、

僕も、VB→VBS変換を知らないくせにVBのサンプルを出したのが悪かったです。


ちなみに、

iconv
http://www.vector.co.jp/soft/win95/util/se316693.html?site=n

を使うというのはだめでしょうか?
(VBSのサンプルを探していたら見つけただけですが。。。)

iconvの使い方は、ぐぐれば分かるのですが、

http://homepage.mac.com/sdkfz164/terminal/iconv.html
とかは、実践的で分かりやすいのではないかと思います。


VB→VBS変換の方法は、引き続き、どなたお願いします。
あぶぽん
大ベテラン
会議室デビュー日: 2005/10/20
投稿数: 205
投稿日時: 2008-02-13 18:44
基本的に手順は単純なので手で組んじゃったほうが早いかも。。。

| 1バイト目から0x80を差し引いたものがJIS漢字の場合:
|  1バイト目と2バイト目からともに、0x80を引き、JISコードにした後、
|   Shift-JISに変換する。
| 1バイト目が半角カタカナの場合:
|  1バイト目をあっさり捨てる。
http://athomejp.com/goldfish/mfc/original/euctosjis.asp
よねKEN
ぬし
会議室デビュー日: 2003/08/23
投稿数: 472
投稿日時: 2008-02-14 10:04
引用:

Daisukeさんの書き込み (2008-02-13 18:19) より:

http://homepage1.nifty.com/MADIA/vb/vb_bbs/200008/200008_00080008.html
上記のサイトよりVBをVBSへ応用使用としましたが、
subプロシージャやFunctionを呼び出すことができないようです。
呼び出しの部分で、コンパイルエラーとなってしまいます。



どんなコードを書いて、どんなエラーが発生したのでしょうか?
エラーになりました、だけでは第三者には状況が伝わらないです。

引用:

vbsへの応用ができるのか、
それともvbとして実行しなくてはいけないのか
わかりません。



とりあえず、参考URLのコードを見てみましたが、
VBSに置き換える場合、そのままだとコンパイルエラーになる点は、
・As 〜で型の指定を行っている箇所 (VBSでは型を指定できないので、As句は省略する必要があります)
・For 〜 NextのNextの後のiの指定 (VBSではこれはできないので省略する必要があります。)
・Do bb = src(ix) と書いてある場所。投稿時のミス??

後、コンパイルエラーにならないけど、ロジック的にVBSで問題になりそうな箇所。
・このプログラムではByte型を前提として処理する箇所がたくさんあるのですが、VBSではAs句を指定できない関係上すべてVariant型になります。そのため、いろんな箇所でCByte関数を使って、毎回Byte型に変換しながら処理しないといけないかもしれません。

<追記>
このプログラムの内容については深く読み込んでいませんが、
雰囲気的にEUC→JISへの変換を行い、jis2sjという謎の関数で処理をするプログラムっぽいです。
jis2sjはおそらくこの投稿をした人の独自の関数なのでは?
</追記>

以下は老婆心ですし、蛇足かもしれませんが。

ところで、このソースコードに書いてある内容は理解できていますか?
私は細かく読んでいませんが、よく理解できないコードを流用するのは非常に危険です。
・EUCとはどういう文字コードなのか?
・SJISとはどういう文字コードなのか?
・変換するにはどうすべきか?何を気をつけないといけないか?
をきちんと理解しないとこのプログラムを流用して作ってもテストできないと思いますので、遠回りでも上記の3点を習得された方がよいと思います。

[ メッセージ編集済み 編集者: よねKEN 編集日時 2008-02-14 10:11 ]
Daisuke
会議室デビュー日: 2008/02/13
投稿数: 7
投稿日時: 2008-02-19 15:29
説明不足で大変申し訳ございません。

ADODB.Streamを使用してEUCコードをSJISへ変更するという実装方法について質問です。

EUCコードで作成されたファイルをコード変換しSJISコードのファイルに書き換えるということで正しいでしょうか。

@ EUCコードのファイル
A スクリプトを実行
B @のファイルをSJISコードのファイルとして作成

上記の実装方法ですとADODB.Streamを使用することができましたが、

スクリプト内で、EUCコードの文字列を変数として受け取り、変換する方法はADODB.Streamでは実装できないのでしょうか。

今回実装したい方法は、

@ EUCコードのファイル(CSVファイル)を読み込む
A スクリプト内でEUCコードの文字列を使用して受け取りSJISコードへ変換
  (カンマ区切りの文字列を1つずつ変換) 
A 変換した文字列をファイルへ書き込む

上記のような実装方法はADODB.Streamではできないのでしょうか。
どなたかご存知の方がいたらご教授ください。
kiyokura
ベテラン
会議室デビュー日: 2007/08/08
投稿数: 69
お住まい・勤務地: 岡山
投稿日時: 2008-02-19 23:41
引用:

Daisukeさんの書き込み (2008-02-19 15:29) より:
上記の実装方法ですとADODB.Streamを使用することができましたが、
スクリプト内で、EUCコードの文字列を変数として受け取り、変換する方法はADODB.Streamでは実装できないのでしょうか。



変換後のStreamからファイルに保存せず、コード内で文字列として取得できれば良いわけですよね?
ADODB.Streamには、確かReadTextという、Stream中のバイナリをStringに変換して取得できるメソッドがあったハズです。
うろ覚えのため引数とか覚えてませんが、とりあえずMSDNか何かでADODB.Streamオブジェクトの仕様を調べてみてはいかがでしょうか。おそらく、目的はこれで達せると思います。

ノラ
常連さん
会議室デビュー日: 2003/11/06
投稿数: 37
お住まい・勤務地: 東京都
投稿日時: 2008-02-22 15:53
こんな感じかな
Dim SjisStream 'ADODB.Stream
Dim Line

Set EucStream = CreateObject("ADODB.Stream")
EucStream.Charset = "EUC-JP"
EucStream.LineSeparator = 10
EucStream.Open


Set SjisStream = CreateObject("ADODB.Stream")
SjisStream.Charset = "SHIFT_JIS"
SjisStream.Open

EucStream.LoadFromFile("euc.txt")
Do Until EucStream.EOS
Line = EucStream.ReadText(-2)

'Lineの処理

SjisStream.WriteText Line,1
Loop

EucStream.Close
SjisStream.Close
Set EucStream = Nothing
Set SjisStream = Nothing
ノラ
常連さん
会議室デビュー日: 2003/11/06
投稿数: 37
お住まい・勤務地: 東京都
投稿日時: 2008-02-22 15:55
先頭の
「Dim EucStream 'ADODB.Stream」
が抜けてた。

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