content | /* * 市町村名を抽出する。 * getCity("田村市都路町古道") == "田村市" * getCity("双葉郡浪江町川房") == "双葉郡浪江町" * getCity("双葉郡川内村下川内") == "双葉郡川内村" */ function getCity(str) { var p = getDelimiterPos(str, "市"); if (p > 0) return str.substring(0, p + 1); p = getDelimiterPos(str, "町"); if (p > 0) return str.substring(0, p + 1); p = getDelimiterPos(str, "村"); if (p > 0) return str.substring(0, p + 1); return str; } |
---|---|
spec_version | 1 |
Database: UStoreScriptFunction9
Last Update: 2013-10-22T16:41:08+09:00 History
Item List
-
位置の抽出 2012-09-22T14:14:52+09:00
last update: 2012-03-27T22:53:56+09:00
-
測定高度の計算 2012-09-22T14:14:47+09:00
spec_version 1 content /* * height("5cm") == 0.05 * height("50cm") == 0.5 * height("高さ1m") == 1 * height("地表近く") == 0.01 */ function height(str) { str = toHankaku(str); if (str.charAt(str.length - 2) == 'c') return pickupNum(str)/100; if (str.charAt(str.length - 1) == 'm') return pickupNum(str); return "0.01" } /* * height("測定値(1 ㎝)") == 0.01 * height("測定値(1m)") == 1.0 * height("地表近く") == 0.01 */ function height2(str) { str = skipSpace(toHankaku(str)); var num = pickupNum(str); if (!isNaN(num)) { if (str.indexOf('c') > 0 || str.indexOf('㎝') > 0) return num/100; if (str.indexOf('m') > 0) return num; } return 0.01; } last update: 2013-10-17T14:40:19+09:00
-
経緯度の変換("d度m分s秒"形式を固定小数点数値の度数に変換) 2012-09-22T14:14:13+09:00
spec_version 1 content /** * "d度m分s秒"形式を固定小数点数値の度数に変換して返す。 * @param d 度の数値を含む文字列 (string) * @param m 分の数値を含む文字列 (string) * @param s 秒の数値を含む文字列 (string) * @return 固定小数点数値の度数(double) */ function parseDegree(d,m,s) { var dd = pickupNum(d); var mm = pickupNum(m); var ss = pickupNum(s); var n = dd + (mm / 60) + (ss / 3600); return n; } last update: 2012-09-22T14:14:13+09:00
-
日時の変換 2012-09-22T14:14:13+09:00
spec_version 1 content /** * 文字列から年月日時分として取り出しす。 * [例] * parseYMDHM("2012/3/5 12:07") == "2012-03-05T12:07:00" * parseYMDHM("2012年3月5日 12:00") == "2012-03-05T12:00:00" * @param str 半角または全角の数字の文字を含む文字列 * @return 年月日時分 */ function parseYMDHM(str) { var nums = pickupNumZ(str, false); if (nums[2] > 31) // 日と時の間のスペースが無視された場合 if (nums[2] < 320) { // nums[2] == 112 などの場合は間違う恐れあり nums[4] = nums[3]; nums[3] = nums[2] % 10; nums[2] = Math.floor(nums[2] / 10 + 0.1); } else { nums[4] = nums[3]; nums[3] = nums[2] % 100; nums[2] = Math.floor(nums[2] / 100 + 0.1); } return nums[0] + "-" + toDigit2(nums[1]) + "-" + toDigit2(nums[2]) + "T" + toDigit2(nums[3]) + ":" + toDigit2(nums[4]) + ":00"; } /** * 文字列から先頭の1個の整数を平成の年としてを取り出し、西暦年に変換する。 * [例] * parseHyear("平成23年") == 2011 * parseHyear("H23") == 2011 * parseHyear("23") == 2011 * @param str 半角または全角の数字の文字を含む文字列 * @return 西暦年 */ function parseHyear(str) { var nums = pickupNumZ(str, false); return ""+ (nums[0] + 1988); } /** * 文字列から平成の年月日として取り出し、西暦年月日に変換する。 * [例] * parseHdate("平成23年9月24日") == "2011-09-24" * parseHdate("H23.12.4 (晴)") == "2011-12-04" * parseHdate("23.9.24") == "2011-09-24" * @param str 半角または全角の数字の文字を含む文字列 * @return 西暦年月日 */ function parseHdate(str) { var nums = pickupNumZ(str, false); return (nums[0] + 1988) +"-"+ toDigit2(nums[1]) +"-"+ toDigit2(nums[2]); } /** * 文字列から月日を取り出す。 * [例] * parseMMDD("9月24日 雨") == "09-24" * parseMMDD("9.24 (晴)") == "09-24" * parseMMDD("10.24") == "10-24" * @param str 半角または全角の数字の文字を含む文字列 * @return 月日 */ function parseMMDD(str) { var nums = pickupNumZ(str, false); return toDigit2(nums[0]) +"-"+ toDigit2(nums[1]); } /** * 文字列から時分を取り出しす。 * [例] * parseHHmm("9時23分") == "09:23" * parseHHmm("9.3") == "09:03" * parseHHmm("午後9時3分") == "21:03" * parseHHmm("-") => 00:00 * @param str 文字列 * @return 時分 */ function parseHHmm(str) { var nums = pickupNumZ(str, false); if (nums.length < 2) return "00:00"; if (str[0] == "後" || str[1] == "後") nums[0] += 12; if (nums.length > 1) return toDigit2(nums[0]) +":"+ toDigit2(nums[1]); else return toDigit2(nums[0]) +":00"; } /** * 1桁の数字の前に"0"を補って2桁にする。 * [例] * twoDigits("12月") == "12" * twoDigits("1日") == "01" * @param num 半角または全角の数字の1贈ォ2桁の数字を含む文字列 * @return 2桁の数字 */ function twoDigits(str) { var nums = pickupNumZ(str, false); return toDigit2(nums[0]); } /** * yy.mm.dd形式のymd(yyは平成の年)とhh:mm形式の時分をYYYY-MM-DDThh:mm:00形式の時刻に変換する。 * makeDate1("平23.8.31","9:55") == "2011-08-31T09:55:00" * @param ymd yy.mm.dd形式の年月日(yyは平成の年) (string) * @param hm hh:mm形式の時分 (string) * @return YYYY-MM-DDThh:mm:00形式の時刻(string) function makeDate1(ymd,hm) { if (ymd.length == 0 || hm.length == 0) return ""; for(var i = 0; ymd[i] < '0' || '9' < ymd[i]; i++); ymd = ymd.substring(i); var yymmdd = ymd.split('.'); var year = parseInt(yymmdd[0]) + 1988; var month = yymmdd[1]; if (month.length == 1) month = '0' + month; var day = yymmdd[2]; if (day.length == 1) day = '0' + day; var i = hm.indexOf(':'); var hour = hm.substring(0, i); if (hour.length == 1) hour = '0' + hour; var minute = hm.substring(i+1); if (minute.length == 1) minute = '0' + minute; return year +'-'+ month +'-'+ day +'T'+ hour +':'+ minute +':00'; } */ function makeDate1(ymd,hm) { if (ymd.length == 0 || hm.length == 0) return ""; for(var i = 0; ymd[i] < '0' || '9' < ymd[i]; i++); ymd = ymd.substring(i); var yymmdd = pickupNumZ(ymd, false); if (yymmdd[0] > 2000) { var year = parseInt(ymd.substring(8,10)) + 1988; var month = ymd.substring(5,7); var day = ymd.substring(2,4); } else { var yymmdd = ymd.split('.'); var year = parseInt(yymmdd[0]) + 1988; var month = yymmdd[1]; if (month.length == 1) month = '0' + month; var day = yymmdd[2]; if (day.length == 1) day = '0' + day; } var i = hm.indexOf(':'); var hour = hm.substring(0, i); if (hour.length == 1) hour = '0' + hour; var minute = hm.substring(i+1); if (minute.length == 1) minute = '0' + minute; return year +'-'+ month +'-'+ day +'T'+ hour +':'+ minute +':00'; } /** * yy.mm.dd形式がPDF変換によりdd.mm.yyと認識され、 * 20dd-mm-yyT00:00:00.000に変換される場合の対応。 * YYYY-MM-DDThh:mm:00形式の時刻に変換して返す。 * @param ymd yy.mm.dd形式の年月日(yyは平成の年) (string) * @param hm hh:mm形式の時分 (string) * @return YYYY-MM-DDThh:mm:00形式の時刻(string) */ function makeDate1x(ymd,hm) { //var yymmdd = ymd.split('.'); var year = parseInt(ymd.substring(8,10)) + 1988; var month = ymd.substring(5,7); var day = ymd.substring(2,4); var i = hm.indexOf(':'); var hour = hm.substring(0, i); if (hour.length == 1) hour = '0' + hour; var minute = hm.substring(i+1); if (minute.length == 1) minute = '0' + minute; return year +'-'+ month +'-'+ day +'T'+ hour +':'+ minute +':00'; } /** * 「YYYY」形式の年、「数字+文字」形式の月、「hh」形式の時間、「mm」形式の分から、YYYY-MM-DDThh:mm:00形式の時刻に変換して返す。 * @param year 「YYYY」形式の年(string) * @param mmdd 「数字+文字」形式の月。たとえば"8月17日" (string) * @param hour 「hh」形式の時間(string) * @param minute 「mm」形式の分(string) * @return YYYY-MM-DDThh:mm:00形式の時刻(string) */ function makeDate2(year, mmdd, hour, minute) { var nums = pickupNums(mmdd); var month = nums[0]; if (month < 10) month = '0' + month; var day = nums[1]; if (day < 10) day = '0' + day; return year +'-'+ month +'-'+ day +'T'+ hour +':'+ minute +':00'; } /** * 「YYYY/MM/DD hh:mm」から「YYYY-MM-DDThh:mm:00」形式の時刻に変換して返す。 * (注)入力の区切り文字は他のものでもよい。 * @param ymdhm 「YYYY/MM/DD hh:mm」(string) */ function makeDate3(ymdhm) { var nums = pickupNums(ymdhm); return nums[0] +'-'+ nums[1] +'-'+ nums[2] +'T'+ nums[3] +':'+ nums[4] +':00'; } /** * 年が平成のはずが西暦となっている。 * (「PDF Converter」の変換からの可能性あり) * [例] * parse2000HMD("2023-06-05)[H23-06-05] == "2011-06-05" * @param str 半角または全角の数字の文字を含む文字列 * @return 年月日 */ function parse2000HMD(str) { if (str == null || str == "") return ""; var nums = pickupNums(str); return (nums[0]-12) + "-" + toDigit2(nums[1]) + "-" + toDigit2(nums[2]); } last update: 2013-10-22T16:41:08+09:00
-
共通関数定義 2012-09-22T14:13:38+09:00
spec_version 1 content function add(x, y) { if (isEmpty(x) || isEmpty(y)) return null; return x + y; } function div(x , y) { if (isEmpty(x) || isEmpty(y)) return null; return x / y; } function redOx(x, y) { if (isEmpty(x) || isEmpty(y)) return ""; return x / y; } function redPar(x, y) { if (isEmpty(x) || isEmpty(y)) return ""; return x / (x + y) * 100; } function isEmpty(v) { return v == null || v == ""; } last update: 2012-09-22T14:13:38+09:00
-
共通関数 2012-09-22T14:13:38+09:00
spec_version 1 content /** * コメント用。引数を無視する。 */ function comment(str) { return ""; } var hanStr = " !\"#$%'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~-"; var zenStr = " !”#$%’()*+,―./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|} ̄・"; var hanDigits = "0123456789-+"; var zenDigits = "0123456789―+"; /** * 文字が半角または全角の数字か調べる。 * @param ch 文字 * @return 半角または全角の数字ならtrue、それ以外ならfalse */ function isDigitZ(ch) { if (hanDigits.indexOf(ch) >= 0) return true; return zenDigits.indexOf(ch) >= 0; } /** * 半角または全角の数字で構成される文字列を浮動小数点数値に変換する。 * @param str 半角または全角の数字で構成される文字列 * @return 浮動小数点数値 */ function parseFloatZ(str) { var result = new Array(str.length); for (var i = 0; i < str.length; i++) { var ch = str.charAt(i); var p = hanDigits.indexOf(ch); if (p >= 0) { result[i] = hanDigits[p]; } else { p = zenDigits.indexOf(ch); if (p >= 0) { result[i] = hanDigits[p]; } else { if (ch == '.' || ch == '.') result[i] = '.'; } } } return parseFloat(result.join("")); } /** * 文字列から数値を取り出す。 * @param str 文字列 * @param usefloat 浮動小数点数値を取り出すならtrue、整数値を取り出すならfalse。 * 浮動小数点数値として取り出す場合、半角・全角のピリオドを小数点と見なす。 * 数値と判断できなような複数のピリオドを含む場合は動作は保証されない。 * @return 浮動小数点数値または整数値の配列 */ function pickupNumZ(str, usefloat) { var nums = new Array(); var n = 0; var s = -1; var e = 0; var inNum = false; var fract = false; var size = str.length; for (var i = 0; i < size; i++) { var ch = str.charAt(i); if (isDigitZ(ch)) { if (!inNum) s = i; e = i; inNum = true; } else if (usefloat && (ch == '.' || ch == '.')) { if (inNum) { if (fract) { nums[n++] = parseFloatZ(str.substring(s, e+1)); inNum = false; fract = false; } else { fract = true; } } } else { if (inNum) nums[n++] = parseFloatZ(str.substring(s, e+1)); inNum = false; } } if (inNum) nums[n++] = parseFloatZ(str.substring(s, e+1)); return nums; } /** * 1~2桁の数の前に"0"を補って2桁にする。 * @param num 1~2桁の数 * @return 2桁の数 */ function toDigit2(num) { return (num > 9) ? ""+ num : "0" + num; } /** * 区切り文字の位置を返す。 * @param str 半角または全角の文字を含む文字列 * @param delimits 区切り文字となる文字を複数していした文字列。 * @return どれかの区切り文字が見つかればその位置を返す。区切り文字が無い場合は負値。 */ function getDelimiterPos(str, delimits) { for (var i = 0; i < str.length; i++) if (delimits.indexOf(str.charAt(i)) >= 0) return i; return -1; } /** * 区切り文字より前の文字列を返す。 * [例] * cutTail("土浦小学校(大手町13-32)", "([{([{") => 土浦小学校 * @param str 半角または全角の文字を含む文字列 * @param delimits 区切り文字となる文字を複数していした文字列。 * @return 区切り文字よりも前の文字列。区切り文字無い場合は元の文字列。 */ function cutTail(str, delimits) { var p = getDelimiterPos(str, delimits); return (p >= 0) ? str.substring(0, p) : str; } /** * 区切り文字の間の文字列を返す。 * [例] * getMiddle("土浦小学校(大手町13・32)", "([{([{", ")]})]}") == "大手町13・32" * @param str 半角または全角の文字を含む文字列 * @param sd 前の区切り文字となる文字を複数していした文字列 * @param ed 後の区切り文字となる文字を複数していした文字列 * @return 区切り文字に挟まれた文字列。前の区切り文字がない場合は元の文字列。 */ function getMiddle(str, sd, ed) { var p = getDelimiterPos(str, sd); if (p < 0) return str; str = str.substring(p+1); return cutTail(str, ed); } /* * 区切り文字の外の文字列を返す。 */ function delMiddle(str, sd, ed) { var s = getDelimiterPos(str, sd); if (s < 0) return str; var e = getDelimiterPos(str, ed); if (e < 0) return str; return str.substring(0, s) + " " + str.substring(e + 1, str.length); } /** * 文字列中で半角化可能な文字を全て半角にして返す。 * [例] * toHankaku("土浦小学校(大手町13・32)") => 大手町13-32 * @param str 文字列 * @return 半角化可能な文字がすべて半角化された文字列 */ function toHankaku(str) { var result = new Array(str.length); for (var i = 0; i < str.length; i++) { var ch = str.charAt(i); var p = zenStr.indexOf(ch); if (p >= 0) { result[i] = hanStr[p]; } else { result[i] = ch; } } return result.join(""); } /** * 文字列の途中以降を抽出する。 * substring1("平23",1) => "23" */ function substring1(str,begin) { return str.substring(begin); } /** * 文字列から一部を抽出する。 * substring2("平成23年",2,4) => "23" */ function substring2(str,begin,end) { return str.substring(begin,end); } /** * 文字列から最初に出現した固定小数点数値を抽出して返す。 * @param str 文字列 (string) * @return 固定小数点数値の度数(double) */ function pickupNum(str) { var size = str.length; var s = -1; var e = 0; var fract = false; for (var i = 0; i < size; i++) { var ch = str.charAt(i); if ('0' <= ch && ch <= '9') { if (s < 0) s = i; e = i; } else if (ch == '.') { if (fract) break; fract = true; } else { if (s >= 0) break; } } if (s >= 0) return parseFloat(str.substring(s, e+1)); else return ""; } /** * 文字列から数値を抽出して出現順に配列にして返す。 * @param str 文字列 (string) * @return 数値(double)の配列 */ function pickupNums(str) { var nums = new Array(); var n = 0; var s = -1; var e = 0; var inNum = false; var fract = false; var size = str.length; for (var i = 0; i < size; i++) { var ch = str.charAt(i); if ('0' <= ch && ch <= '9') { if (!inNum) s = i; e = i; inNum = true; } else if (ch == '.') { if (inNum) { if (fract) { nums[n++] = parseFloat(str.substring(s, e+1)); inNum = false; fract = false; } else { fract = true; } } } else { if (inNum) nums[n++] = parseFloat(str.substring(s, e+1)); inNum = false; fract = false; } } if (inNum) nums[n++] = parseFloat(str.substring(s, e+1)); return nums; } /** * 文字列から数値を1個以上取り出し、それらの平均値を求める。 */ function average(str) { var nums = pickupNums(str); var n = nums.length; var val = 0.0; for (var i = 0; i < n; i++) val += val[i]; return val / n; } /** * 文字列1の先頭に文字列2が含まれていたらそれを除いた文字列を返す。 * 含まれていない場合は、文字列1を返す。 * 使用例: $removeStr2("茨城県つくば市","茨城県") => つくば市 * @param s1 文字列1 * @param s2 文字列2 * @return 文字列1の先頭の文字列2を取り除く */ function removeStr2(s1, s2) { var i = s1.indexOf(s2); if (i == 0) { return s1.substring(s2.length); } else { return s1; } } /* * 全角文字列を半角文字列に変換する。 */ function zen2han(input) { han = "0123456789.,-+"; zen = "0123456789.,-+"; str = ""; for (i=0; i<input.length; i++) { c = input.charAt(i); n = zen.indexOf(c,0); if (n >= 0) c = han.charAt(n); str += c; } return str; } /* * 文字列strの最後からn番目の文字がcならr1を返し、そうでなければr2を返す。 */ function select2(str, n, c, r1, r2) { if (str.charAt(str.length - n) == c) return r1; else return r2; } /* * 前後の半角文字を消す。 */ function delHankaku(str) { var len = str.length; for(var i = 0; i < len; i++) { var c = str.charAt(i); if (c < ' ' || '~' < c) break; } var b = i; for(; i < len; i++) { c = str.charAt(i); if (' ' <= c && c <= '~') break; } return str.substring(b, i); } /* * strのi番目(iが負のときは最後から-i番目)の文字がcならx、そうでなければyを返す。 */ function charChoice(str, i, c, x, y) { if (i < 0) i = str.length + i; if (str.charAt(i) == c) return x; else return y; } /* * 条件condが成立すればx、しなければyを返す。 */ function condition(cond, x, y) { return cond ? x : y; } /* * 文字列から(先頭の)数値を抽出する。 * @param str 文字列 * @param defnum 数値以外の文字列の場合に返す数値 * @return 数値 */ function defaultNum(str, defnum) { if (str == "" || str == "-" || str == "-") return defnum; var nums = pickupNumZ(str, true); if (nums.length == 0) return defnum; return nums[0]; } /* * 文字列から空白を除去する。 * @param str 文字列 * @return 空白を除去した文字列 */ function skipSpace(str) { var result = ""; var size = str.length; for (var i = 0; i < size; i++) { var ch = str.charAt(i); if (ch != " " && ch != " ") { result += ch; } } return result; } last update: 2013-10-17T14:39:04+09:00