SoftwareEngineering/ProgramLanguage/WSH/JScript
/// ---------------------------------------------------------------------------
/// <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);
}
/// ---------------------------------------------------------------------------
/// <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);
}