アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

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

久々の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

久々の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;
}
ファン
検索
<< 2017年05月 >>
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
最新記事
写真ギャラリー
最新コメント
タグクラウド
カテゴリーアーカイブ
月別アーカイブ
プロフィール
日別アーカイブ
×

この広告は30日以上新しい記事の更新がないブログに表示されております。