[[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 あ,い,う,え,お か,き,く,け,こ さ,し,す,せ,そ た,ち,つ,て,と な,に,ぬ,ね,の