[[SoftwareEngineering/ProgramLanguage/WSH/JScript]]

#contents

*CSV読み込み [#q836c99d]
**テンプレート [#s97949d3]
 /// ---------------------------------------------------------------------------
 /// <summary>Stream オブジェクトに保存するデータの種類を表します</summary>
 /// ---------------------------------------------------------------------------
 var StreamTypeEnum = {
      adTypeBinary : 1   // バイナリ データを表します
     ,adTypeText : 2     // 既定値です。Charset で指定された文字セットにあるテキスト データを表します
 }
 
 
 
 /// ---------------------------------------------------------------------------
 /// <summary>Stream オブジェクトから、ストリーム全体、または次の行を読み取るかどうかを表します</summary>
 /// ---------------------------------------------------------------------------
 var StreamReadEnum = {
      adReadAll : -1     // 既定値です。現在の位置から EOS マーカー方向に、すべてのバイトをストリームから読み取ります。
     ,adReadLine : -2    // ストリームから次の行を読み取ります
 }
 
 
 
 /// ---------------------------------------------------------------------------
 /// <summary>テキスト Streamオブジェクトの行区切りに使われている文字を表します</summary>
 /// ---------------------------------------------------------------------------
 var LineSeparatorsEnum = {
      adCR : 13      // 改行復帰を示します。
     ,adCRLF : -1    // 既定値です。改行復帰行送りを示します。
     ,adLF : 10      // 行送りを示します。
 }
 
 
 
 /// ---------------------------------------------------------------------------
 /// <summary>CSVファイルを読み込むクラス</summary>
 /// ---------------------------------------------------------------------------
 CSVFileStream = function() {
     this.readingFile = new ActiveXObject('ADODB.Stream');
 }
 
 
 /// ---------------------------------------------------------------------------
 /// <summary>CSVファイルを開く</summary>
 /// <param name="AFileName">Stream に読み込むファイルの名前</param>
 /// <param name="ACharset">読み込むファイルの文字コード</param>
 /// <param name="ALineSeparator">行区切りに使われている文字</param>
 /// <param name="ADelimiter">列区切りに使われている文字</param>
 /// ---------------------------------------------------------------------------
 CSVFileStream.prototype.open = function(AFileName, ACharset, ALineSeparator, ADelimiter) {
     this.delimiter = ADelimiter;
     
     this.readingFile.Type = StreamTypeEnum.adTypeText;
     this.readingFile.Charset = ACharset;
     this.readingFile.LineSeparator = ALineSeparator;
     this.readingFile.Open();
     this.readingFile.LoadFromFile(AFileName);
 }
 
 
 /// ---------------------------------------------------------------------------
 /// <summary>CSVファイルを閉じる</summary>
 /// ---------------------------------------------------------------------------
 CSVFileStream.prototype.close = function() {
     if (!this.readingFile) return;
     this.readingFile.Close();
 }
 
 
 /// ---------------------------------------------------------------------------
 /// <summary>クラス内で動的に確保したメモリを解放する</summary>
 /// ---------------------------------------------------------------------------
 CSVFileStream.prototype.dispose = function() {
     this.readingFile = null;
 }
 
 
 /// ---------------------------------------------------------------------------
 /// <summary>CSVデータの次の行を取得する</summary>
 /// <returns>次の行を配列で戻す</returns>
 /// ---------------------------------------------------------------------------
 CSVFileStream.prototype.next = function() {
     if (!this.readingFile) return null;
     if (!this.hasNext) return null;
     
     return this.readingFile.ReadText(StreamReadEnum.adReadLine).split(this.delimiter);
 }
 
 
 /// ---------------------------------------------------------------------------
 /// <summary>次の行が存在するか戻す</summary>
 /// <returns>次の行が存在すればtrueを戻し、それ以外はfalseを戻す</returns>
 /// ---------------------------------------------------------------------------
 CSVFileStream.prototype.hasNext = function() {
     return (!this.readingFile.EOS);
 }


**使用例 [#be989fdf]
***スクリプト [#ra1b1350]
 /// ---------------------------------------------------------------------------
 /// <summary>標準出力画面に値を表示する</summary>
 /// ---------------------------------------------------------------------------
 function echo(AMessages) {
     var _Message = '';
     for (var _Index = 0; _Index < arguments.length; _Index++) {
         _Message += arguments[_Index];
     }
     WScript.Echo(_Message);
 }
 
 
 
 /// ---------------------------------------------------------------------------
 /// <summary>文字列を置き換える</summary>
 /// ---------------------------------------------------------------------------
 function sprintf(ATemplate) {
     if (ATemplate == undefined) return '';
     if (ATemplate == null) return '';
     
     var _Value = ATemplate;
     for (var i = 1; i < arguments.length; i++) {
         var _RegExp = new RegExp('\\{' + (i - 1) + '\\}', 'g');
         _Value = _Value.replace(_RegExp, arguments[i]);
     }
     
     return _Value;
 }
 
 
 
 try {
     
     var _CSVFileStream = new CSVFileStream();
     
     _CSVFileStream.open('org.codereign.jscript.io.CSVFileStream.txt', 'utf-8', LineSeparatorsEnum.adCRLF, ',');
     
     
     while (_CSVFileStream.hasNext()) {
         var _Fields = _CSVFileStream.next();
         echo(sprintf('{0}:{1}:{2}:{3}:{4}', _Fields[0], _Fields[1], _Fields[2], _Fields[3], _Fields[4]));
     }
     
     
     _CSVFileStream.close();
     _CSVFileStream.dispose();
     _CSVFileStream = null;
     
 } catch(e) {
     echo(e.message);
 }

***CSVファイル [#oe180290]
-org.codereign.jscript.io.CSVFileStream.txt
ファイル名:org.codereign.jscript.io.CSVFileStream.txt
文字コード:UTF-8N
 あ,い,う,え,お
 か,き,く,け,こ
 さ,し,す,せ,そ
 た,ち,つ,て,と
 な,に,ぬ,ね,の

トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS