CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発

秀丸マクロ第3弾は「指定した列数、レコード数でCSVファイルを作る」

投稿日:2019年6月16日 更新日:

秀丸マクロがおもしろいという記事を書いて以来、何か要件はないだろうかとさがしていた。
秀丸マクロがおもしろくて練習のため2つのマクロを作ってみた

「指定した列数、レコード数でCSVファイルを作る」なんて要件が出てきたので作ってみた。今回とトライで得られた知識やポイントを以下に列記する。
・サブルーチンの作り方を習得するのに時間がかかった
・変数名に##や$$と指定するのは、ルーチン内でのみ利用する変数であることがわかった
・数値を文字化する際に、指定桁で0埋めする関数が用意されていなかったので独自に作った
・処理を高速化するには、処理中に画面描画を止めればよい

なお、以下のマクロをそのまま実行すると4秒かかる。列が5つで5000レコードで、ファイルに保存すると500kbそこそこ。20倍の10万レコードで作ろうとしたら、80秒もかかってしまう計算。高速化する方法がきっとあるのだろうが、それは今後の課題としておく。

/////////////////////
// CSVを作る
setcompatiblemode 0x0F;

#clNum = 5;  // 列数
#recNum = 5000;  // レコード数
#byteLen = 20;  // レコードのバイト数
#isInyoufu = true;  // 引用符を付けるかどうか

disabledraw;	//画面の変更を停止

// ヘッダー部作成
##j = 1;
$$tmp = "";
while( ##j <= #clNum )
{
	call item_name ##j, 7, "属性";
	$$aryName[##j-1] = $$return;
	$$atr = $$return;
	call inyoufuAdd $$atr;
	$$atr = $$return;
	if( ##j != #clNum )
		$$atr = $$atr + ",";
	$$tmp = $$tmp + $$atr;
	##j = ##j + 1;
}
$$tmp = $$tmp + "\n";
insert $$tmp;

// レコード部作成
##i = 1;
while( ##i <= #recNum )
{
	##j = 1;
	$$tmp = "";
	while( ##j <= #clNum )
	{
		call item_name ##i, #byteLen, $$aryName[##j-1] + "_";
		$$atr = $$return;
		call inyoufuAdd $$atr;
		$$atr = $$return;
		if( ##j != #clNum )
			$$atr = $$atr + ",";
		$$tmp = $$tmp + $$atr;
		##j = ##j + 1;
	}
	$$tmp = $$tmp + "\n";
	insert $$tmp;
	##i = ##i + 1;
}
enabledraw;	//画面の変更を復帰
endmacro;

///////////////////
// 以下サブルーチン

// 接頭語+指定桁数値の文字列を作る
// ##1 : 数値
// ##2 : 桁数
// $$3 : 接頭語
item_name:
	call keta_renban ##1, ##2 - strlen($$3);
	$$ans = $$3 + $$return;
	return $$ans;


// 0で埋めた桁指定の数値文字列を作る
// ##1 : 数値
// ##2 : 桁数
keta_renban:
	$$ans = str(##1);
	##len = strlen( $$ans );
	while( ##len < ##2 )
	{
		$$ans = "0" + $$ans;
		##len = strlen( $$ans );
	}
	return $$ans;

// 引用符を付ける
// $$1 : 文字列
inyoufuAdd:
	$$ans = $$1;
	if( #isInyoufu )
		$$ans = "\"" + $$ans + "\"";
	return $$ans;

-ソフト開発

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

no image

尻有

知る人ぞ知るアングラ系サイト。 尻有とか、どーもとか。 定期的にチェックして、マイソフトがクラックされてないかどうか チェックしてるんよ。 復活してましたね、どーもが。 入り口が、なかなか見つからなか …

zipcopy~圧縮してコピー~ができたのでアップしておく

【zipcopyの概要】 大きなファイルやフォルダをネットワーク越しにコピーする際、圧縮してからコピーすることで、ネットワークの帯域を少しで使わないようにすることを目的とする。以下3つの手順を自動的に …

no image

POSTフィルター

VCでつくったWindowsアプリから、Webサイト上のPHPを呼び出して、 MySQLのDBをいじる。 そんなストーリーを思いつき、サンプルアプリを作った。 家からやったら問題なかったので会社から試 …

PDFアレコレにページ抽出機能を追加して独自アイコンも組み込んだ

PDFアレコレに念願のページ抽出機能を追加した。ページの操作っていうのはPDF編集においてキモだ。ページの回転を考慮した編集操作が必要だからけっこう苦労しちゃった。変更点は以下の通り。 Ver2.06 …

電子印鑑のつくり方

PDFアレコレで捺印ができるようにしたわけだけど、PDFアレコレで印鑑を作ることはできない。別途つくったpdfまたはpngをnatsuinフォルダに入れておけば、捺印時にそいつらが指定可能になる。 電 …