SSブログ

node [node.js]

const { rejects } = require('assert');
const fs = require('fs');
const { resolve } = require('path');
const readline = require('readline');
const common = require('../common/common');

exports.jobMain = async function () {
console.log("jobMain start");
/*
var streem = fs.createReadStream('./joblist.txt', 'utf-8');
var rl = readline.createInterface({ input: streem });
for await(const line of rl) {
await common.sleep(500);
console.log('const_' + line);
};
*/

/**
var index = 1;
rl.on('line', (data) => {
console.log('on_' + data);
common.sleep(1000, index);
++index;
});
*/

const jobFile = await readFiles();

for (var line of jobFile) {
//console.log("key=" + line['key']);
console.log(line);
console.log(line['key']);
//JSON.parse(line);
//console.log("key=" + line['key']);
}

console.log("jobMain end");
}

async function readFiles() {
var streem = fs.createReadStream('./joblist.txt', 'utf-8');
var rl = readline.createInterface({ input: streem });

return new Promise((resolve, rejects) => {
const lineList = [];
try {
rl.on('line', (line) => {

console.log(line);
// 末尾のカンマがあったら削除
line = line.replace(/,\s*$/, "");
console.log(line);

lineList.push(JSON.parse(line));
}).on('close', () => {
console.log('close()');
resolve(lineList);
})
} catch (err) {
rejects(err);
}
});
}


nice!(0)  コメント(0) 

node.jsのバージョン [node.js]

nodeのバージョン確認
npm --help version

現在インストール中が表示される
nvm list

使用するバージョンを指定
nvm use "使うバージョン.例)10.23.0"

◆nodeのオプション
node -h
----no-warnings

◆実験的な機能を使う場合
node --experimental-modules ./index.js


nice!(0)  コメント(0) 

半角カナ→全角カナ変換 [JavaScript]

半角カナ→全角カナに変換する。
// 半角カナと全角カナのマッピング配列
KANA_CONVERT_MAP = {'半角カナ': '全角カナ'};

// 正規表現。キーでヒットしたら値のほうで置換する
const REG_EXP_CONVERT = new RegExp('(' + Object.keys(KANA_CONVERT_MAP).join('|') + ')', 'g');

// 変換処理
var retStr = inputStr.replace(REG_EXP_CONVERT, function (match) {
return KANA_CONVERT_MAP[match];
});

// 濁点の変換。いる?
retStr = retStr.replace(/゙/g, '゛').replace(/゚/g, '゜');
return retStr;

nice!(0)  コメント(0) 

[VBA]色々 [VBA]

■定数宣言
Const 定数名 [As データ型] = "定数の値"

■条件分岐
If 条件式1 Then
ElseIf 条件式2 Then
Else
End If
・条件式:And Or Not = <>

■ループ:For-Next
For 変数 = 開始数値 To 終了数値 [カウンターに加算する数値]
'処理
Next

・Exit For
ループを抜ける。break

■ループ:Do-Loop
Do [While/Until 条件式]
'処理
Loop

・Exit Do
ループを抜ける。

■最終行、最終列取得
行 指定セルからCtrl+↓ Cells(1,1).End(xlDown).Row
行 指定行の下から上 Cells(Rows.Count, 1).End(xlUp).Row
列 指定セルからCtrl+→ Cells(1, 1).End(xlToRight).Column
列 指定列の右から左 Cells(1, Columns.Count).End(xlToLeft).Column

シートの行数 Rows.Count
シートの列数 Columns.Count
選択セルの行番号 Row
選択セルの列番号 Column

■関数
Functionプロシージャ 戻り値あり
Subプロシージャ void型

Function func1(arg1 As Long, arg2 As Long) As Long
' プロシージャ名=戻り値
func1 = arg1 + arg2
End Function



nice!(0) 

配下のファイルを文字コード変換して保存していくマクロ [サクラエディタ]

1.配下のファイルパスを作成
dir /s /b /a-d target

2.マクロ。test-macro.js
// ファイルシステムオブジェクト生成
var fs = new ActiveXObject("Scripting.FileSystemObject");

// パスリストを開く
var file = fs.OpenTextFile("C:/work/test/path_list.txt", 1, false, -2);

// 1行ずつ読み込み対象ファイルを上書き保存(UTF-8、LF)
while (!file.AtEndOfStream) {
var filepath = file.ReadLine();
Editor.FileOpen(filepath);
Editor.FileSaveAs(GetFilename, 4, 2);
Editor.FileClose();
}

// パスリストファイルをクローズ
file.Close();

■マクロ
文字コード
0 SJIS(省略時規定値)
1 JIS
2 EUC
3 Unicode
4 UTF-8
5 UTF-7
6 Unicode(BigEndian)

改行
0 変更しない(省略時規定値)
1 CRLF(Windows)
2 LF(UNIX)
3 CR(Mac)

nice!(0)  コメント(0) 

【Spring】共通処理:Interceptor [Spring]

■applicationContext.xml

<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*"/>
<bean class="alpha.web.common.AppHandlerInterceptor" />
</mvc:interceptor>
</mvc:interceptors>

■Java
HandlerInterceptorAdapterを継承
preHandle
postHandle
afterCompletion (例外発生時も実行される)

コメント(0) 

正規表現 [正規表現]

fooInfoForm.getHoge()

fooInfoForm.hoge

検索:(\w+).get(\w+)\(\)
置換:$1.\l$2

タグ:正規表現
nice!(0)  コメント(0) 

リフレクション:親クラス、getter対象、実行結果 [カスタムタグ]

■hiddenタグ生成:親クラスの配列をフィールドに持つgetterへ設定する

package alpha.web.tag;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import alpha.web.system.form.SectionCondForm;

public class BusinessHiddenTagHandler extends BeanHiddenTagHandler {

public static void main(String args[]) throws ReflectiveOperationException {

BusinessHiddenTagHandler main = new BusinessHiddenTagHandler();

SectionCondForm form = new SectionCondForm();

// 親クラスのメソッド一覧
Method[] methods = form.getClass().getSuperclass().getMethods();

// 対象フィールド名(getter/setterのget/setを除外した文字列)
List<String> fieldList = new ArrayList<String>();

// 対象フィールド名(値取得用のメソッドリスト)
List<Method> getterMethodList = new ArrayList<Method>();

// メソッドの中でgetterだけを抽出してリストに追加
for (Method method : methods) {
String methodName = method.getName();
System.out.println("->" + methodName);

// getterか判定。戻り値の型で配列か判定するためsetterは使えない
if (methodName.startsWith("get") && !methodName.equals("getClass")) {
// getterメソッド追加
getterMethodList.add(method);

// フィールド名の追加(hidden出力項目名)
String field = methodName.substring(3);
field = field.substring(0, 1).toLowerCase() + field.substring(1, field.length());

// 配列の場合、[0]を追加。(1レコードしか登録しない前提)
if (method.getReturnType().isArray()) {
field = field + "[0]";
}
fieldList.add(field);
}
}

for (int i = 0; i < fieldList.size(); i++) {

String[] value = (String[]) getterMethodList.get(i).invoke(form);
System.out.println(fieldList.get(i) + "=" + value[0]);

String hiddenTag = main.getHiddenTag(fieldList.get(i), value[0]);
System.out.println(hiddenTag);
}

}

}

【タグライブラリ】設定したFormBeanのフィールドをhiddenタグに展開して表示 [JSP]

package spring.app.tag;

import java.io.IOException;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class BeanHiddenTagHandler extends TagSupport {
/** Beanが格納されている属性名 */
private String beanName = "";

/**
* @param beanName セットする beanName
*/
public void setBeanName(String beanName) {
this.beanName = beanName;
}

@Override
public int doEndTag() throws JspException {
// 出力
try {
Object targetBean = pageContext.findAttribute(beanName);
if(targetBean == null) {
return EVAL_PAGE;
}

// Class<?> cls = Class.forName(targetBean);
Class<?> cls = targetBean.getClass();
Field[] fieldArray = cls.getDeclaredFields();
StringBuilder retStr = new StringBuilder();

for (Field field : fieldArray) {
// 値取得のため
field.setAccessible(true);

Object beanValue = field.get(targetBean);
// 値がない場合は項目名だけでhiddenタグ作成。配列とリストは
if (beanValue == null) {
retStr.append(getHiddenTag(field.getName(), ""));
continue;
}

// List型の場合、配列にしてhiddenタグ作成
if (beanValue instanceof List<?>) {
List<?> list = (List<?>) field.get(targetBean);

for (int i = 0; i < list.size(); i++) {
String name = field.getName() + "[" + i + "]";
Object value = (String) list.get(i); // 要素がtoString出来ない可能性
retStr.append(getHiddenTag(name, value));
}
// 配列型の場合
} else if (beanValue.getClass().isArray()) {
Object[] list = (Object[]) beanValue;

for (int i = 0; i < list.length; i++) {
String name = field.getName() + "[" + i + "]";
Object value = list[i]; // 要素がtoString出来ない可能性
retStr.append(getHiddenTag(name, value));
}

} else {
// プリミティブ型だけにしたい。特定のインターフェースだったらネスト
// List型以外の場合
retStr.append(getHiddenTag(field.getName(), field.get(targetBean)));
}
}

// hiddenタグを出力
pageContext.getOut().print(retStr.toString());

} catch (IOException | IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
// 残りのページを評価する値を返して終了
return EVAL_PAGE;
}

private String getHiddenTag(String name, Object value) {
return String.format("<input type=\"hidden\" name=\"%s\" value=\"%s\">", name, value);
}

}

nice!(0)  コメント(0) 

タグライブラリの作成方法

■用意するファイル
(例)Webアプリケーション名=springApp
1. tldファイルを用意
/springApp/WebContent/WEB-INF/apptaglib.tld

2. タグハンドラーJavaクラスを作成
spring.app.tag.BeanHiddenTagHandler.java

3. JSPから呼び出す

■詳細
1. tldファイル(/WEB-INF/apptaglib.tld)
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.1"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
<tlib-version>1.0</tlib-version>
<!-- タグライブラリの名称とtldファイルの紐づけ -->
<short-name>apptaglib</short-name>
<uri>/WEB-INF/apptaglib</uri>

<!-- タグの定義 -->
<tag>
<!-- タグの名前 -->
<name>SampleTag</name>
<!-- タグハンドラクラス -->
<tag-class>spring.app.tag.BeanHiddenTagHandler</tag-class>
<!-- bodyを持つかどうか -->
<body-content>empty</body-content>
<!-- 属性の定義。attributeを複数並べられる。 -->
<attribute>
<!-- 属性名 -->
<name>beanName</name>
<!-- 必須属性かどうか -->
<required>true</required>
<!-- 実行時評価属性かどうか -->
<rtexprvalue>true</rtexprvalue>
<!-- 属性の型 -->
<type>java.lang.String</type>
</attribute>
</tag>
</taglib>


2. タグハンドラーJavaクラス
・属性が必要な場合はsetterが必要
・スコープからオブジェクト取得する場合、pageContext.findAttribute("属性名");で取得可能

spring.app.tag.BeanHiddenTagHandler.java

package spring.app.tag;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;

public class BeanHiddenTagHandler extends TagSupport {
/** Beanが格納されている属性名 */
private String beanName = "";

/**
* @param beanName セットする beanName
*/
public void setBeanName(String beanName) {
this.beanName = beanName;
}

@Override
public int doEndTag() throws JspException {
// 出力
try {
pageContext.getOut().print("タグに設定した入力値=" + beanName);
} catch (IOException e) {
e.printStackTrace();
}
// 残りのページを評価する値を返して終了
return EVAL_PAGE;
}
}

3. JSP
TLDファイルの読み込みと、呼び出し。

<%@taglib prefix="app" uri="/WEB-INF/apptaglib" %>


nice!(1)  コメント(0) 

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。