LoginSignup
1
1

JScriptでCSVファイルをSQLで検索

Last updated at Posted at 2024-03-11

概要

録画ワークシート(.ods)をCSVで保存し、SQLでグループ集計する。

環境

  • Windows 11 Pro (64bit)
  • Microsoft Access database engine 2016 (English)
  • LibreOffice Calc

手順

CSVファイルの用意

録画.odsをCSVで名前を付けて保存する。
ファイル名:録画.csv
ファイルの種類:テキストCSV(*.csv)
文字コード:日本語(Windows-932) 或いはShift-JIS
フィールドの区切り記号:,

CSVファイルの加工

日付項目はその日の先頭行以降は省いているため補間する。
日付、タイトル項目を抽出。
JScriptファイルはANSI(Shift-JIS)で保存する。

csvproc.js
/*
cscript //Nologo csvproc.js < 録画.csv > rokuga.csv
*/
{
	var d;
	while (! WScript.StdIn.AtEndOfStream) {
		var rec = WScript.StdIn.ReadLine();
		var f = rec.split(",");
		if (f[2]) {
			d = f[2];
		}
		var fld = [d, f[8]];
		WScript.StdOut.WriteLine(fld.join());
	}
}

ファイルDSNの作成

スタートメニューをクリックし、odbcと入力して「ODBCデータソースアドミニストレーター(64ビット)」を起動する。
「ファイルDSN」タブの追加ボタンをクリックする。
ドライバーから「Microsoft Access Text Driver (*.txt, *.csv)」を選択しdsnファイルを作成する。
設定はデフォルト値で。

Microsoft Access データベース エンジン 2016 再頒布可能コンポーネント(accessdatabaseengine_X64.exe)が必要。

hoge.dsn
[ODBC]
DRIVER=Microsoft Access Text Driver (*.txt, *.csv)
UID=admin
UserCommitSync=Yes
Threads=3
SafeTransactions=0
PageTimeout=5
MaxScanRows=25
MaxBufferSize=2048
FIL=text
Extensions=txt,csv,tab,asc
DriverId=27
DefaultDir=C:\Projects\etc\db

Schema.iniの用意

ANSI(Shift-JIS)で保存する。

Schema.ini
[rokuga.csv]
Format=CSVDelimited
ColNameHeader=True
MaxScanRows=25
CharacterSet=932
Col1=日付 Text
Col2=タイトル Text

Schema.ini ファイル (テキスト ファイル ドライバー) - Open Database Connectivity (ODBC) | Microsoft Learn

グループ集計

JScriptファイルはANSI(Shift-JIS)で保存する。

group.js
/*
cscript //Nologo group.js > result.csv
*/
{
	var cn = WScript.CreateObject("ADODB.Connection");
	cn.Open("FileDSN=./hoge.dsn;");

	var sql = "select min(日付),count(*),タイトル"
		+ " from [rokuga.csv]"
		+ " group by タイトル having count(*)>1"
		+ " order by 1";

	var rs = cn.Execute(sql);
	for ( ; ! rs.EOF; rs.MoveNext()) {
		var fld = [];
		for (var i = 0; i < 3; i++) {
			fld[i] = rs(i);
		}
		WScript.Echo(fld.join("\t"));
	}
	rs.Close();
	cn.Close();
}

Microsoft OLE DB Provider for ODBC - ActiveX Data Objects (ADO) | Microsoft Learn

おまけ

総務省|地方行政のデジタル化|全国地方公共団体コード

から「都道府県コード及び市区町村コード」000925835.xlsをダウンロード。CSVファイルで保存。
ヘッダ行の改行を修正する。

Schema.ini
[000925835.csv]
Format=CSVDelimited
ColNameHeader=True
MaxScanRows=25
CharacterSet=932
shin.js
/*
cscript //Nologo shin.js > result.csv
*/
{
	var cn = WScript.CreateObject("ADODB.Connection");
	cn.Open("FileDSN=./hoge.dsn;");

	var sql = "select * from [000925835.csv]"
		+ " where 市区町村名(漢字) like '%新%'";

	var rs = cn.Execute(sql);
	for ( ; ! rs.EOF; rs.MoveNext()) {
		var fld = [];
		for (var i = 0; i < 5; i++) {
			fld[i] = rs(i);
		}
		WScript.Echo(fld.join("\t"));
	}
	rs.Close();
	cn.Close();
}
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1