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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

PDFium ViewerによるPDFレンダリングがイケてる

PDFが電子ペーパーの絶対的な標準になったなか、PDFをプログラムであつかうのがとても簡単になってきた。

PDFアレコレのソースコードをnoteで有料公開してみた

ブロガーのマネタイズとして一般的になってきたnote。 ただブログで記事を書いたところで、おいらのようなアラフィフサラリーマンじゃー課金してくれるわけがない。 なので、おいらの大きな武器であるプログラ …

no image

軌道に乗ったか!?

 この11月の売り上げ本数が、10本の大台にのりました。私が最も力を入れているCAD関連ツールがです。喜ばしいことです。関係各位への感謝がつのります。  思えば半年前、あるユーザーの要望から始まったこ …

no image

SE

妻に勧められて、この本を呼んでみました。 SEのフシギな生態―失敗談から学ぶ成功のための30ヶ条 作者: きたみ りゅうじ 出版社/メーカー: 幻冬舎 発売日: 2005/12 メディア: 文庫 一言 …

Hyper-Vのvhdxを圧縮するのはPowerShellでやるんだけど、その自動化手法がおもしろいじゃん(3)

vhdを手軽に圧縮できるPowerShellプログラムの決定版。 まずは、前回考えたことを振り返る。。 ps1内のvhdのファイルパスを自分で書き変えなきゃいけないのが難点だから、ps1と同じ場所にあ …