VBScriptにおいて、FileSystemObjectのWriteLineメソッドを使ってファイルへの文字列の書き出しを行おうとしたのですが、「−」(減算記号:文字コード8722。HTMLでは「−」)を書き出そうとした場合に次のエラーになります。

プロシージャの呼び出し、または引数が不正です。

この現象について解説したサイトはありますでしょうか?(日本語で探したのですが見当たらないもので…)
また、VBScript以外でも、Javascriptなど、FileSystemObjectを使う言語において、このエラーは起こってしまうものでしょうか?

回答の条件
  • 1人3回まで
  • 登録:2008/01/26 10:42:11
  • 終了:2008/02/02 10:45:02

回答(2件)

id:hidering No.1

hidering回答回数59ベストアンサー獲得回数32008/01/26 11:28:01

ポイント35pt

特殊文字は環境によって扱いが変わるようです。

(http://ykr.main.jp/html/component/entities.html)

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic...

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic...

対応していない環境の場合、文字を使用しない。又は、置換するのがエラーの回避策のようです。

id:tail_furry

ありがとうございます。

Replaceで置き換える方法で対処はしたのですが、hideringさんに出していただいた3番目のURLの内容を見ると、他の文字でも起こるみたいですね。

エラーが起きた時点でどの文字か特定してその都度文字を置き換えていく必要がありそうです…。

2008/01/26 11:47:02
id:airplant No.2

airplant回答回数220ベストアンサー獲得回数492008/01/27 10:27:14

ポイント35pt

VBScriptだと「-」や機種依存文字が書けないと言うのは、聞いた事がないなのですが、、、

書き込み以外のところでエラーになっていませんでしょうか? それかデータベースの処理系の部分でエラーかも知れません。


以前下記コードで文字をファイルに書き込みしたことあるので、試してみました。しかし、少なくともWSH環境でのVBScriptでは「-」も機種依存文字もエラーにはならず、書き込みできました(xxx.vbsで保存して色々な文字を試せます)。

Option Explicit

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const iniFile = "test.ini"

Dim objFSO, objInput, objOutput, nn

Set objFSO = wscript.CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set objInput = objFSO.OpenTextFile(iniFile, ForReading)
nn = objInput.ReadLine
objInput.Close
On Error GoTo 0

nn = InputBox("文字を入力", , nn)
Set objOutput = objFSO.CreateTextFile(iniFile)
objOutput.WriteLine (nn)
objOutput.Close
id:tail_furry

ありがとうございます。

提示していただいたコードをvbsファイルとして保存してテストしてみたのですが、やはり、「−」でエラーになってしまいます。(「-」ではないです。試しに「−」をコピーしてテストしてみてください。)次のようなエラーです。

スクリプト: (ファイルのフルパス)

行: 17

文字: 1

エラー: プロシージャの呼び出し、または引数が不正です。

コード: 800A0005

ソース: Microsoft VBScript 実行時エラー

17行目は「objOutput.WriteLine (nn)」です。

最初このエラーに気づいたのはASPでの処理だったのですが、エラーの場所を特定するために、「on error resume next」をかけた上で、処理ごとに「response.write err.description」をかけて一行ずつ処理を追っていって、さらに、一文字ずつ出力するように処理を分解した上で特定しているので、エラーを起こしたのはWriteLineで間違いないはずです。

2008/01/28 09:51:00
  • id:airplant
    良く見ずに回答してしまい、すみませんでした。
    U+2212のときには、エラーになることを確認しました。
    (マイクロソフトでは、ShiftJISにマッピングされていないので、エラーになっています)
    内部処理系はUnicodeなのに、出力時にShiftJISになるもので、エラーになるのですね。

    以前、多用する「~」が「?」になってどう対処するか困ったことありました。
    ダッシュを始めとして、複数個あるので、結構やっかいです。

    WAVE DASH - FULLWIDTH TILDE問題
    http://ja.wikipedia.org/wiki/Unicode#.E6.97.A5.E6.9C.AC.E8.AA.9E.E7.92.B0.E5.A2.83.E3.81.A7.E3.81.AEUnicode.E3.81.AE.E8.AB.B8.E5.95.8F.E9.A1.8C

    MINUS SIGN (U+2212, "−") をFULLWIDTH HYPHEN-MINUS (U+FF0D, "-")


    >VBScript以外でも、Javascriptなど、FileSystemObjectを使う言語において、このエラーは起こってしまうものでしょうか?
     想定ですが、マイクロソフト系でファイルをShiftJISで保存する場合は全部起きてしまうと思います。
     エラーが起きなくても、「?」に書き換えられてしまいます。
    Unicodeでファイルを保存するオプションがあるときは、問題ありません(ExcelのUnicodeテキストファイルなど)。
  • id:airplant
    何度もすみません。
    書き込むデータフォーマットがUnicodeでいいのであれば、ファイルオープン時の文字コードをUnicodeにすれば無事書き込みできました。

    FileSystemObject オブジェクト .OpenTextFile ( ファイル名 [, 入出力モード [, 新規作成フラグ [, 文字コード ]]])

    (実際にテストしてみたのは、CreatTextFile)
    って、これじゃ解決にならないのかも知れません。
  • id:tail_furry
    ありがとうございます。
    デフォルトでの書き込みがASCIIでしたので、フォーマットをUnicodeにしてみたところ、こちらでも書き込みできました。
    コードを修正した状態でしばらく不具合がないかどうか様子を見てみたいと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません