新規記事の投稿を行うことで、非表示にすることが可能です。
2017年05月07日
キー番号の競合チェックが必要になったためシェルで。。 ・同一キー番号がリストにないかチェックし、なければリストに追加 ・同一キー番号がリストにないかチェックし、あればリストから削除
#================================================================
# ファイル名:kyougou_keyadd.sh
# 概要 :同一キー番号がリストにないかチェックし、なければリストに追加
# パラメータ:
# P1:キー番号
#================================================================
key_length=5
#---------------------------------------
#メイン処理ここから
#---------------------------------------
echo "同一キー番号がリストにないかチェックし、なければリストに追加します"
#---------------------------------------
#パラメータチェック
#---------------------------------------
#入力されたかチェック
if [ $# -eq 0 ]
then
echo "P1が指定されていません。"
return 1
fi
inputkey=$1
#文字数チェック
if [ ${#inputkey} -ne $key_length ]
then
echo "P1が5文字ではありません。"
return 1
fi
#数字かチェック
#P2に+1をし、その戻り値をRETに保存
expr $inputkey + 1 > /dev/null 2>&1
ret=$?
#戻り値を使って正常か異常かを判断
if [ ! $ret -lt 2 ]
then
echo "P1が数字ではありません。"
return 1
fi
#リストが存在するかチェック
if [ ! -e keychk_list ]; then
#リストなし
#リストにキー番号を追加
echo $inputkey >> keychk_list
echo "正常終了しました。"
return 0
fi
#リストあり
#リスト内に同一キー番号が存在するかチェック
if cat keychk_list | grep -q $inputkey
then
#同一キー番号あり
echo "$inputkey は既に登録されています。"
return 0
fi
#同一キー番号なし
#リストにキー番号を追加
echo $inputkey >> keychk_list
echo "正常終了しました。"
#正常終了
return 0
#================================================================
# ファイル名:kyougou_keydel.sh
# 概要 :同一キー番号がリストにないかチェックし、あればリストから削除
# パラメータ:
# P1:キー番号
#================================================================
key_length=5
#---------------------------------------
#メイン処理ここから
#---------------------------------------
echo "同一キー番号がリストにないかチェックし、あればリストから削除します"
#---------------------------------------
#パラメータチェック
#---------------------------------------
#入力されたかチェック
if [ $# -eq 0 ]
then
echo "P1が指定されていません。"
return 1
fi
inputkey=$1
#文字数チェック
if [ ${#inputkey} -ne $key_length ]
then
echo "P1が5文字ではありません。"
return 1
fi
#数字かチェック
#P2に+1をし、その戻り値をRETに保存
expr $inputkey + 1 > /dev/null 2>&1
ret=$?
#戻り値を使って正常か異常かを判断
if [ ! $ret -lt 2 ]
then
echo "P1が数字ではありません。"
return 1
fi
#リストが存在するかチェック
if [ ! -e keychk_list ]; then
#リストなし
echo "正常終了しました。"
return 0
fi
#リストあり
#リスト内に同一キー番号が存在するかチェック
if cat keychk_list | grep -q $inputkey
then
#同一キー番号あり
echo "削除対象あり。"
#cat keychk_list | sed -e "s/$inputkey//"
sed -i -e "/$inputkey/d" keychk_list
return 0
fi
#同一キー番号なし
echo "正常終了しました。"
#正常終了
return 0
# ファイル名:kyougou_keyadd.sh
# 概要 :同一キー番号がリストにないかチェックし、なければリストに追加
# パラメータ:
# P1:キー番号
#================================================================
key_length=5
#---------------------------------------
#メイン処理ここから
#---------------------------------------
echo "同一キー番号がリストにないかチェックし、なければリストに追加します"
#---------------------------------------
#パラメータチェック
#---------------------------------------
#入力されたかチェック
if [ $# -eq 0 ]
then
echo "P1が指定されていません。"
return 1
fi
inputkey=$1
#文字数チェック
if [ ${#inputkey} -ne $key_length ]
then
echo "P1が5文字ではありません。"
return 1
fi
#数字かチェック
#P2に+1をし、その戻り値をRETに保存
expr $inputkey + 1 > /dev/null 2>&1
ret=$?
#戻り値を使って正常か異常かを判断
if [ ! $ret -lt 2 ]
then
echo "P1が数字ではありません。"
return 1
fi
#リストが存在するかチェック
if [ ! -e keychk_list ]; then
#リストなし
#リストにキー番号を追加
echo $inputkey >> keychk_list
echo "正常終了しました。"
return 0
fi
#リストあり
#リスト内に同一キー番号が存在するかチェック
if cat keychk_list | grep -q $inputkey
then
#同一キー番号あり
echo "$inputkey は既に登録されています。"
return 0
fi
#同一キー番号なし
#リストにキー番号を追加
echo $inputkey >> keychk_list
echo "正常終了しました。"
#正常終了
return 0
#================================================================
# ファイル名:kyougou_keydel.sh
# 概要 :同一キー番号がリストにないかチェックし、あればリストから削除
# パラメータ:
# P1:キー番号
#================================================================
key_length=5
#---------------------------------------
#メイン処理ここから
#---------------------------------------
echo "同一キー番号がリストにないかチェックし、あればリストから削除します"
#---------------------------------------
#パラメータチェック
#---------------------------------------
#入力されたかチェック
if [ $# -eq 0 ]
then
echo "P1が指定されていません。"
return 1
fi
inputkey=$1
#文字数チェック
if [ ${#inputkey} -ne $key_length ]
then
echo "P1が5文字ではありません。"
return 1
fi
#数字かチェック
#P2に+1をし、その戻り値をRETに保存
expr $inputkey + 1 > /dev/null 2>&1
ret=$?
#戻り値を使って正常か異常かを判断
if [ ! $ret -lt 2 ]
then
echo "P1が数字ではありません。"
return 1
fi
#リストが存在するかチェック
if [ ! -e keychk_list ]; then
#リストなし
echo "正常終了しました。"
return 0
fi
#リストあり
#リスト内に同一キー番号が存在するかチェック
if cat keychk_list | grep -q $inputkey
then
#同一キー番号あり
echo "削除対象あり。"
#cat keychk_list | sed -e "s/$inputkey//"
sed -i -e "/$inputkey/d" keychk_list
return 0
fi
#同一キー番号なし
echo "正常終了しました。"
#正常終了
return 0
久々のC言語1と同じのをシェルで実装してみると・・・
#====================================================================================
# ファイル名:calender_chk.sh
# 概要 :calenderファイルに従い、元号(年号/和暦)コードから元号文字を取得する
#
# カレンダーファイル
# H,h,4,1989/1/8
# S,s,3,1926/12/25
# T,t,2,1912/7/30
# M,m,1,1868/9/8
#
# パラメータ:
# P1:年号コード
#====================================================================================
key_length=1
#---------------------------------------
#メイン処理ここから
#---------------------------------------
echo "calenderファイルに従い、年号コードから年号文字を取得する"
#---------------------------------------
#パラメータチェック
#---------------------------------------
#入力されたかチェック
if [ $# -eq 0 ]
then
echo "P1が指定されていません。"
return 1
fi
nengou_code=$1
#文字数チェック
if [ ${#nengou_code} -ne $key_length ]
then
echo "P1が1文字ではありません。"
return 1
fi
#数字かチェック
#P2に+1をし、その戻り値をRETに保存
expr $nengou_code + 1 > /dev/null 2>&1
ret=$?
#戻り値を使って正常か異常かを判断
if [ ! $ret -lt 2 ]
then
echo "P1が数字ではありません。"
return 1
fi
#---------------------------------------
#
#---------------------------------------
#リストが存在するかチェック
if [ ! -e calender.txt ]; then
#リストなし
echo "カレンダーファイルがありません。"
return 1
fi
#リストあり
#リスト内に同一元号コードが存在するかチェック
for line in `cat calender.txt`
do
colmun1=`echo ${line} | cut -d ',' -f 1`
colmun2=`echo ${line} | cut -d ',' -f 2`
colmun3=`echo ${line} | cut -d ',' -f 3`
colmun4=`echo ${line} | cut -d ',' -f 4`
echo "項目1:${colmun1}"
echo "項目2:${colmun2}"
echo "項目3:${colmun3}"
echo "項目4:${colmun4}"
echo "行終了"
if [ $colmun3 = $nengou_code ]
then
echo "ヒットです。"
echo "項目2:${colmun2}"
return 0
fi
done
#異常終了
echo "ノーヒットです。"
return 1
# ファイル名:calender_chk.sh
# 概要 :calenderファイルに従い、元号(年号/和暦)コードから元号文字を取得する
#
# カレンダーファイル
# H,h,4,1989/1/8
# S,s,3,1926/12/25
# T,t,2,1912/7/30
# M,m,1,1868/9/8
#
# パラメータ:
# P1:年号コード
#====================================================================================
key_length=1
#---------------------------------------
#メイン処理ここから
#---------------------------------------
echo "calenderファイルに従い、年号コードから年号文字を取得する"
#---------------------------------------
#パラメータチェック
#---------------------------------------
#入力されたかチェック
if [ $# -eq 0 ]
then
echo "P1が指定されていません。"
return 1
fi
nengou_code=$1
#文字数チェック
if [ ${#nengou_code} -ne $key_length ]
then
echo "P1が1文字ではありません。"
return 1
fi
#数字かチェック
#P2に+1をし、その戻り値をRETに保存
expr $nengou_code + 1 > /dev/null 2>&1
ret=$?
#戻り値を使って正常か異常かを判断
if [ ! $ret -lt 2 ]
then
echo "P1が数字ではありません。"
return 1
fi
#---------------------------------------
#
#---------------------------------------
#リストが存在するかチェック
if [ ! -e calender.txt ]; then
#リストなし
echo "カレンダーファイルがありません。"
return 1
fi
#リストあり
#リスト内に同一元号コードが存在するかチェック
for line in `cat calender.txt`
do
colmun1=`echo ${line} | cut -d ',' -f 1`
colmun2=`echo ${line} | cut -d ',' -f 2`
colmun3=`echo ${line} | cut -d ',' -f 3`
colmun4=`echo ${line} | cut -d ',' -f 4`
echo "項目1:${colmun1}"
echo "項目2:${colmun2}"
echo "項目3:${colmun3}"
echo "項目4:${colmun4}"
echo "行終了"
if [ $colmun3 = $nengou_code ]
then
echo "ヒットです。"
echo "項目2:${colmun2}"
return 0
fi
done
#異常終了
echo "ノーヒットです。"
return 1
久々のC言語1
/*
カレンダー情報を参照し、元号コードから元号文字を返す
calender.txt
H h 4 1989,1,8
S s 3 1926,12.25
T t 2 1912,7,30
M m 1 1868,9,8
*/
int gengou_str_get(int gengou_code, char *gengou_str)
{
typedef struct {
char gengou_oomoji[4];
char gengou_komoji[4];
int gengou_code;
char start_day[12];
}cale_t;
FILE *fp;
char *filename = "C:\\Study\\pleiades-e4.5-cpp-jre_20151002\\pleiades\\workspace\\C_Study_01\\src\\calender.txt";
cale_t cale_info;
cale_t *cale_info_p;
cale_info_p = &cale_info;
int ret;
/* ファイルのオープン */
if ((fp = fopen(filename, "r")) == NULL) {
fprintf(stderr, "%sのオープンに失敗しました.\n", filename);
return -1;
}
memset(cale_info_p, 0x00, sizeof(cale_t));
ret = -1;
/* ファイルの終端まで文字を読み取り表示する */
while( ( ret = fscanf( fp, "%s %s %d %s", cale_info_p->gengou_oomoji, cale_info_p->gengou_komoji, &(cale_info_p->gengou_code), cale_info_p->start_day ) ) != EOF ){
if (cale_info_p->gengou_code == gengou_code){
strncpy(gengou_str, cale_info_p->gengou_oomoji, sizeof(cale_info_p->gengou_oomoji));
printf("HIT!!\n");
/* ファイルのクローズ */
ret = 1;
break;
}
memset(cale_info_p, 0x00, sizeof(cale_t));
}
/* ファイルのクローズ */
fclose(fp);
return ret;
}
void TEST(void)
{
int now_gengou_code=3;
char gengou_str[4];
int ret;
memset(gengou_str, 0x00, sizeof(gengou_str));
#if 1
ret = gengou_str_get(now_gengou_code, gengou_str);
if(ret < 0){
printf("error gengou_str_get\n");
return;
}
printf("get %s\n", gengou_str);
#else
switch (now_gengou_code)
{
case 1:
printf("get M\n");
break;
case 2:
printf("get T\n");
break;
case 3:
printf("get S\n");
break;
case 4:
printf("get H\n");
break;
default:
printf("New\n");
break;
}
#endif
return;
}