これ自分用のコードです。
- function libname(dsn)
- {
- i = index(dsn, ".");
- if (i > 0) {
- tmp = substr(dsn, 1, i - 1);
- }
- else {
- tmp = "WORK";
- }
- return toupper(tmp);
- }
-
- function memname(dsn)
- {
- i = index(dsn, ".");
- if (i > 0) {
- tmp = substr(dsn, i + 1, length(dsn));
- }
- else {
- tmp = dsn;
- }
- return toupper(tmp);
- }
-
- function ilog(path, dsn)
- {
- printf("R,%s,%s,%d,%s,%d\n", path, dsn, FNR, FILENAME, NR);
- return 1;
- }
-
- function olog(path, dsn)
- {
- printf("W,%s,%s,%d,%s,%d\n", path, dsn, FNR, FILENAME, NR);
- return 1;
- }
-
- /NOTE: ライブラリ参照名/ && /を次のように割り当てました。/ {
- libref = $3;
- getline;
- while ($1 != "物理名") {
- getline;
- }
- lib[libref] = $3;
-
- }
-
- $1 ~ /NOTE:/ && $2 ~ /データセット/ && $NF ~ /オブザベーションを読み込みました。/ {
- dsn = $3;
- libref = libname(dsn);
- mem = memname(dsn);
-
- if (libref != "WORK" && libref != "SASHELP") {
- dir = lib[libref];
- if (dir != "") {
- tmp = sprintf("%s/%s.sas7bdat", dir, tolower(mem));
- status = ilog(tmp, dsn);
- }
- else {
- printf("ERROR %s\n", dsn);
- exit;
- }
- }
- }
-
- $1 ~ /NOTE:/ && $2 ~ /データセット/ && $NF ~ /変数です。/ {
- dsn = $3;
- libref = libname(dsn);
- mem = memname(dsn);
-
- if (libref != "WORK" && libref != "SASHELP") {
- dir = lib[libref];
- if (dir != "") {
- tmp = sprintf("%s/%s.sas7bdat", dir, tolower(mem));
- status = olog(tmp, dsn);
- }
- else {
- printf("ERROR %s\n", dsn);
- exit;
- }
- }
- }
-
- $1 ~ /MPRINT\([A-Z0-9_]+\):/ && $2 ~ /^set$/ {
- match($3, /([a-zA-Z0-9_]+\.)?[a-zA-Z0-9_]+/);
- if (RLENGTH > 0) {
- dsn = substr($3, RSTART, RLENGTH);
- libref = libname(dsn);
- mem = memname(dsn);
- if (libref != "WORK" && libref != "SASHELP") {
- dir = lib[libref];
- if (dir != "") {
- tmp = sprintf("%s/%s.sas7bdat", dir, tolower(mem));
- status = ilog(tmp, dsn);
- }
- else {
- printf("ERROR %s\n", dsn);
- exit;
- }
- }
- }
- }
-
- END {
- print "_EOF_";
- }
function libname(dsn)
{
i = index(dsn, ".");
if (i > 0) {
tmp = substr(dsn, 1, i - 1);
}
else {
tmp = "WORK";
}
return toupper(tmp);
}
function memname(dsn)
{
i = index(dsn, ".");
if (i > 0) {
tmp = substr(dsn, i + 1, length(dsn));
}
else {
tmp = dsn;
}
return toupper(tmp);
}
function ilog(path, dsn)
{
printf("R,%s,%s,%d,%s,%d\n", path, dsn, FNR, FILENAME, NR);
return 1;
}
function olog(path, dsn)
{
printf("W,%s,%s,%d,%s,%d\n", path, dsn, FNR, FILENAME, NR);
return 1;
}
/NOTE: ライブラリ参照名/ && /を次のように割り当てました。/ {
libref = $3;
getline;
while ($1 != "物理名") {
getline;
}
lib[libref] = $3;
}
$1 ~ /NOTE:/ && $2 ~ /データセット/ && $NF ~ /オブザベーションを読み込みました。/ {
dsn = $3;
libref = libname(dsn);
mem = memname(dsn);
if (libref != "WORK" && libref != "SASHELP") {
dir = lib[libref];
if (dir != "") {
tmp = sprintf("%s/%s.sas7bdat", dir, tolower(mem));
status = ilog(tmp, dsn);
}
else {
printf("ERROR %s\n", dsn);
exit;
}
}
}
$1 ~ /NOTE:/ && $2 ~ /データセット/ && $NF ~ /変数です。/ {
dsn = $3;
libref = libname(dsn);
mem = memname(dsn);
if (libref != "WORK" && libref != "SASHELP") {
dir = lib[libref];
if (dir != "") {
tmp = sprintf("%s/%s.sas7bdat", dir, tolower(mem));
status = olog(tmp, dsn);
}
else {
printf("ERROR %s\n", dsn);
exit;
}
}
}
$1 ~ /MPRINT\([A-Z0-9_]+\):/ && $2 ~ /^set$/ {
match($3, /([a-zA-Z0-9_]+\.)?[a-zA-Z0-9_]+/);
if (RLENGTH > 0) {
dsn = substr($3, RSTART, RLENGTH);
libref = libname(dsn);
mem = memname(dsn);
if (libref != "WORK" && libref != "SASHELP") {
dir = lib[libref];
if (dir != "") {
tmp = sprintf("%s/%s.sas7bdat", dir, tolower(mem));
status = ilog(tmp, dsn);
}
else {
printf("ERROR %s\n", dsn);
exit;
}
}
}
}
END {
print "_EOF_";
}