本記事は、%Library.PopulateUtils.clsの備忘録になります。
関数説明
%PopulateUtilsに設定された関数群の説明と使い方の解説を行います。
Integer・String等の基本的な型
Integer
整数値を返す
・引数 Integer(min As %Integer = 0, max As %Integer = 1000000000) as %Integer
w ##class(%PopulateUtils).Integer() // 126453899
Float
浮動小数点値を返す
・引数 Float(min As %Float = 0, max As %Float = 10000, scale As %Integer = 0) as %Integer
scaleは小数点以下の桁数
w ##class(%PopulateUtils).Float(0,100,4) // 37.8325
String
文字列を返す
・String(len As %Integer = 1) as %String
パターンは下記 $e($c($zu(165,1,26)+65)_$zu(165,1,9999), 1, $s(len>0:len,1:1))
1~5文字内で、len桁で切り取って返す。 ランダムな文字列をイメージしていると、割とショッパイ感じの値を返す関数
w ##class(%PopulateUtils).String(5) // R8008
StringMin
文字列を返す ランダムな文字列をイメージするなら、String()よりこちらの方が沿っている気がします。
・引数 StringMin(minlen As %Integer = 1, maxlen As %Integer = 1) as %String 最小文字数と最大文字数を指定し、その文字数範囲内でランダムな文字数の文字列を返す
w ##class(%PopulateUtils).StringMin(1,10) // hQkNPac
VarString
文字列を返す
・引数 VarString(maxlen As %Integer = 1) as %String
返される文字列は、最大「maxlen」内のランダムな文字数になる
w ##class(%PopulateUtils).VarString(10) // RRZ!%[RZ7
日時関連
Date
日付を返す
・引数 Date(min As %Date, max As %Integer) as %Date
w ##class(%PopulateUtils).Date() // 39581
CDate
日付を指定のフォーマットで出力します。
・引数 CDate(format As %Integer = 1, min As %Date = 30000, max As %Date = 55000) as %String
// 2024-01-01~2024-12-31間の日付をyyyy-mm-ddのフォーマットで返す
w ##class(%PopulateUtils).CDate(3, 66840, 67205)
PosixTime
PosixTime値を返す
PosixTime(min As %PosixTime = “”, max As %PosixTime = “”) as %PosixTime
min, maxが有効値でない場合、min=-6919738016441081856 (1900-01-01 00:00:00)、max=現在日時
w ##class(%PopulateUtils).PosixTime() // 1154312571753350586
TimeStamp
タイムスタンプ値を返す
・引数 TimeStamp(min As %TimeStamp, max As %TimeStamp) as %String
w ##class(%PopulateUtils).TimeStamp() // 1987-06-15 01:10:46
住所関連
USState
アメリカの州の略語を返す
AK, AL, AR, AZ, CA, CO, CT, DE, FL, GA, HI, IA, ID, IL, IN, KS, KY, LA, MA, MD, ME, MI, MN, MO, MS, MT, NC, ND, NE, NH, NJ, NM, NV, NY, OH, OK, OR, PA, RI, SC, SD, TN, TX, UT, VT, VA, WA, WI, WV, WY
w ##class(%PopulateUtils).USState() // ND
City
26の都市名を返す。
都市名のリストは下記。頭文字がA~Zまでの都市名。KがなくBが重複している。A lbany, B oston, B ensonhurst, C hicago, D enver, E lmhurst, F argo, G ansevoort, H ialeah, I slip, J ackson, L archmont, M iami, N ewton, O ak C reek, P ueblo, Q ueensbury, R eston, S t Louis, T ampa, U kiah, V ail, W ashington, X avier, Y oungstown, Z anesville
w ##class(%PopulateUtils).City()
Street
住所を返す
パターンは下記 $zu(165,1,9999)+1_” “_グループ①_” “_グループ②
【第①グループ】 Maple, Ash, Elm, Oak, Main, First, Second, Washington, Franklin, Clinton, Madison
【第②グループ】 Street, Avenue, Blvd, Court, Place, Drive
w ##class(%PopulateUtils).Street() // 8191 Washington Court
USZip
アメリカの郵便番号を返す
パターンは下記 $zu(165, 1, 89999)+10000
w ##class(%PopulateUtils).USZip() // 14938
USPhone
アメリカの電話番号を返す
パターンは下記 $zu(165,1,799)+200_”-“_$zu(165,1,799)+200_”-“_$zu(165,1,8999)+1000
w ##class(%PopulateUtils).USPhone() // 588-795-7227
人物情報
FirstName
人物の名前を返す。男と女を引数に持つ。
・引数 FirstName(gender As %String = “”) as %String gender = 1:男性, 2:女性, null:両方
【男性名称=75種】 Al, Alfred, Alvin, Andrew, Angelo, Aviel, Bart, Bill, Bob, Brendan, Brian, Buzz, Chad, Charles, Chris, Clint, Dan, Dave, David, Dick, Dmitry, Ed, Edgar, Edward, Elmo, Elvis, Emilio, Fred, Geoffrey, George, Howard, James, Jeff, Joe, John, Jose, Joshua, Jules, Keith, Kenny, Kevin, Lawrence, Mark, Mario, Martin, Marvin, Michael, Milhouse, Mo, Neil, Norbert, Orson, Patrick, Paul, Peter, Phil, Quentin, Quigley, Ralph, Richard, Rob, Robert, Roger, Sam, Stavros, Stuart, Ted, Terry, Umberto, Vincent, Will, William, Wolfgang, Xavier, Zeke
【女性名称=74種】 Agnes, Alexandra, Alice, Amanda, Angela, Ashley, Barb, Barbara, Belinda, Brenda, Charlotte, Chelsea, Christine, Christen, Danielle, Debra, Debby, Diane, Elvira, Emily, Emma, Filomena, Frances, Gertrude, Greta, Hannah, Heloisa, Imelda, Jane, Janice, Jocelyn, Josephine, Juanita, Julie, Kim, Kirsten, Kristen, Kyra, Laura, Linda, Lisa, Liza, Lola, Lydia, Maria, Mary, Maureen, Michelle, Molly, Nataliya, Natasha, Nellie, Olga, Pam, Pat, Patricia, Phyllis, Rhonda, Roberta, Sally, Samantha, Sophia, Susan, Tara, Terry, Thelma, Uma, Usha, Valery, Violet, Wilma, Yan, Zelda, Zoe
w ##class(%PopulateUtils).FirstName()
LastName
人物の苗字を返します。すごい多い・・・
【苗字245種】 Allen, Avery, Adam, Adams, Alton, Ahmed, Anderson, Baker, Beatty, Burroughs, Bach, Bachman, Black, Brown, Browne, Browning, Braam, Basile, Bukowski, Bush, Chadbourne, Cheng, Chang, Campos, Cannon, Chadwick, Chesire, Clinton, Clay, Connors, Cooke, Cooper, Cerri, Cunningham, Diavolo, DeSantis, Djakovic, DeLillo, Drabek, Donaldson, Davis, Dunlap, Duquesnoy, Evans, Edwards, Eisenstien, Edison, Emerson, Eno, Eastman, Eagleman, Frith, Fripp, Finn, Faust, Fives, Frost, Feynman, Gaboriault, Geoffrion, Gomez, Gallant, Goldman, Gore, Gibbs, Gold, Goncharuk, Grabscheid, Garcia, Houseman, Huff, Hanson, Harrison, Hills, Hertz, Hammel, Humby, Hernandez, Isaksen, Ironhorse, Ipsen, Ingrahm, Ingersol, Iacobelli, Ingleman, Isaacs, Ihringer, Jafari, Joyce, Jackson, Jones, Johnson, Jaynes, Jung, Jenkins, Koivu, Kovalev, King, Klingman, Kelvin, Klein, Klausner, Kratzmann, Koenig, Larson, Leiberman, Lennon, Lepon, Levinson, Long, LaRocca, Lee, Li, Lubbar, Love, Loveluck, Lopez, Mara, Massias, Malkovich, Moon, Murphy, Murray, McCormick, Macrakis, Mailer, Munt, Martinez, Mastrolito, Minichillo, Monroe, Malynko, Miller, Marks, McCoy, Noodleman, Novello, Nagel, Nathanson, Newton, Nelson, North, Ng, Nichols, O’Donnell, O’Brien, O’Rielly, Orwell, Orlin, Ott, Olsen, Page, Paladino, Palmer, Pantaleo, Pape, Paraskiv, Pascal, Perez, Peters, Peterson, Petersburg, Pybus, Presley, Press, Quigley, Quilty, Quince, Quincy, Quine, Quixote, Ramsay, Ragon, Ravazzolo, Rogers, Rotterman, Roentgen, Rodriguez, Russell, Smith, Smyth, Schultz, Schulte, Salm, Sato, Schaefer, Simpson, Sands, Solomon, Semmens, Sorenson, Sverdlov, Tesla, Tsatsulin, Tweed, Thompson, Taylor, Tillem, Townsend, Ubertini, Uhles, Ueckert, Umansky, Uberoth, Ulman, Underman, Van De Griek, Vanzetti, Vivaldi, Vonnegut, Waal, Walker, Wilson, Woo, Wells, Waters, Willeke, Wijnschenk, Waterman, Winters, White, Williams, West, Xander, Xavier, Ximines, Xerxes, Xenia, Xiang, Young, Yeats, Yang, Yu, Yancik, Yakulis, Yezek, Yoders, Zemaitis, Zubik, Zimmerman, Zevon, Zucherro, Zampitello, Zweifelhofer
w ##class(%PopulateUtils).LastName()
Name
人名を返す
組み合わせは下記ルール。ファーストネームからじゃないのか・・・ ..LastName()_”,”_..FirstName(gender)_” “_$c($zu(165,1,26)+65)_”.”
・引数 Name(gender As %String = “”) as %String gender = 1:男性, 2:女性, null:両方
w ##class(%PopulateUtils).Name() // Thompson,Charlotte G.
SSN
米国社会保障番号を返す
パターンは下記 $zu(165,1,899)+100_”-“_$zu(165,1,89)+10_”-“_$zu(165,1,8999)+1000
w ##class(%PopulateUtils).SSN() // 822-21-8024
会社情報
Company
会社名を返す
会社名生成のルールは下記3つのグループを①_②_③の順に結合して返す
【第①グループ】 Compu, Dyna, Quanta, Hyper, Meta, Kwal, Opti, Robo, Tera, Mega, Giga, Xena, Micro, Macro, Inter, Yoyo, Medi, Pico, Accu, Globa, Octo, Cyber, Tele, Syner, Securi, Bio, Intra
【第②グループ】 Dyne, Sys, Tron, Matix, mo, gy, Sonics, Calc, Tel, Soft, Dynamics, Pedia, Systems, Net, Data, Ware, Glomerate, Lateral, Tech, Plex, Comp
【第③グループ】 Inc., Corp., Media Inc., Holdings Inc., .com, LLC., Group Ltd., Associates, Partners, Gmbh.
w ##class(%PopulateUtils).Company()
Mission
「企業の目指す目標・使命・経営理念」等を返す
下記6つのグループから1つづつ選択し、順に結合して返す。
【第①グループ】 Leaders in , Developers of , Providers of , Resellers of , On-line distributors of , Experts in , Specializing in the development and manufacturing of , Post-sale services for , Spearheading the next generation of , The industry leader in , Enabling individuals and businesses to manage , Building shareholder value by delivering
【第②グループ】 “”, advanced , cutting-edge , breakthrough , complex , high-performance , scalable , just-in-time , open , personal , high-tech , high-touch , open-source , virtual , interactive , eco-friendly , agile , cloud-based , premise-based , sustainable , intelligent , innovative , world-class , knowledge-based , compliant , secure , standards-based , disruptive , non-linear , dynamic , enhanced , real-time , synergistic
【第③グループ】 ””, quantum , nano-, hyper-, optical , financial , multi-media , object-oriented , broad-band , secure , digital , enterprise , crowd-sourced , genetic , wireless , satellite-based , ISO 9003-ready , Web 3.0 , HTML5 , post-Microsoft , natural language , big data , predictive analytic , seven-sigma , distributed , massively-parallel , mission-critical
【第④グループ】 ””, devices and , instrumentation , graphical , XML , Internet , application development , database , data warehouse , forecasting , voice-enabled , cold-fusion powered , platforms for , advanced , virtualized
【第⑤グループ】 services , technologies , media , content , middle-ware , connectivity , consulting services , gaming , models , productivity tools , instruments , marketing services , apps
【第⑥グループ】 for on-line commerce., for the Financial community., for discriminating investors., for the Entertainment industry., for consumers., for the Fortune 5., for the Fortune 50., for the Fortune 500., for the Fortune 5000., for the enterprise., for the desktop., for the Health Care community., for mobile devices., for social networks., for industry and government., for emerging markets., for industry and academia., for capital markets., for high-worth individuals., for our long-term clients., for the pharmaceutical industry., for additive manufacturing.
w ##class(%PopulateUtils).Mission()
Title
役職を返す
下記2つのグループを連結する
【第①グループ】 “, Senior , Associate , Assistant , Strategic , Global , Laboratory , Executive
【第②グループ】 Engineer, Sales Rep., Support Engineer, Developer, Marketing Manager, Accounts Rep., Resources Director, Director, Product Manager, Research Asst., Systems Engineer, Technician, WebMaster, Administrator, Product Specialist, Accountant, Hygienist
w ##class(%PopulateUtils).Title() // Global Director
Product
製品名を返す
Table, Chair, Lamp, Desk
w ##class(%PopulateUtils).Product()
その他
ArrayElement
引数「text」に渡す配列から、ランダムで1つを選択し返します。
k text
s text($i(text))="a"
s text($i(text))="b"
s text($i(text))="c"
w ##class(%PopulateUtils).ArrayElement(.text) // 値がランダムで返る
BuildReferenceSample
指定したテーブルのレコードIDを取得します。
・引数 BuildReferenceSample(class, sample, size=500, selpct=25)
クラスのレコードIDが第二引数「sample」に格納されます。 sizeはサンプル数で、selpctはレコード全体の何%を対象とするかを指定します
s clsNm="developer.csv.Patient"
d ##class(%PopulateUtils).BuildReferenceSample(clsNm,.sample, 10, 90)
zw sample
// 下記がターミナルに表示されます
// sample=10
// sample(1)=51
// ...
// sample(10)=20
BuildValueSetSQL
SQLを実行し、列データを取得します。
・引数 BuildValueSetSQL(cptr, cext, table, column, size=500, verbose=0) as %Status
下記グローバルに格納されます。 ^IRIS.Temp(cptr, cext, [cnt])=columnデータ(列データ)
verbose=1とすると、実行クエリや進行状況などが出力されます。
s tbl="developer_csv.Patient"
s clm="漢字氏名"
d ##class(%PopulateUtils).BuildValueSetSQL(1,1,tbl,clm,10,1)
zw ^IRIS.Temp(1,1)
// 下記がターミナルに表示されます
// ^IRIS.Temp(1,1)=10
// ^IRIS.Temp(1,1,1)="伊藤 太郎"
// ...
// ^IRIS.Temp(1,1,2)="佐藤 太郎"
ExtentValue
^IRIS.Temp(cptr, cext)のデータをランダムに返す BuildValueSetSQLとセット
・引数 ExtentValue(cptr As %Integer, cext As %Integer) as %String
w ##class(%PopulateUtils).ExtentValue(1,1) // 田中 太郎
Counter
^||%Populate(“c”, counter)に対し、$incrementを実行します。
・引数 Counter(counter As %String = “c”, initial As %Integer = 1) as %Integer
counter=カウントする種類、initial=初期値
w ##class(%PopulateUtils).Counter("a") // 1
w ##class(%PopulateUtils).Counter("a") // 2
w ##class(%PopulateUtils).Counter("b", 2) // 2
w ##class(%PopulateUtils).Counter("b") // 3
Currency
通貨値を返す
・引数 Currency(min As %Integer = 0, max As %Integer = 10000) as %Integer
w ##class(%PopulateUtils).Currency() // 7433.543 小数点...?
Color
5つの色名を返す
Red, Green, Blue, Yellow, Black
w ##class(%PopulateUtils).Color()
Random
0~nの乱数を返す
w ##class(%PopulateUtils).Random(100) // 28
Syllable
意味ありそうで全くない文章っぽいような文字列を返す。
・引数 Syllable(maxlen As %Integer = 30) as %String
下記4つのグループからランダムに文字列を選択し結合し、maxlenの値で切り落とす。 半角スペースは連結後に1/2の確率で付加される。
【第①グループ】 A, I, Am, An, Iso, Ic
【第②グループ】 Lo, Ly, Re, Co, To, On, Op
【第③グループ】 Com, Syn, Tri, Uni, Via, Geo, Ism, Ion, Ies, Two, Pus, Tech, Quo
【第④グループ】 Able, Cycle, Atic, Look, Mili, Nano, Octo, Pyro, Status, Kilo, Dyna, Endo, Ecto, Gyro, Heli, Atic, Able, Look, Much, Graph, Gram, Wave, Sound, Plasm, Physical, Scope, Copter, Morph, Range, Pede, Second, Zeno, Photo, Type, Much, Invent, Thetic
w ##class(%PopulateUtils).Syllable() // LyCom TechCoOn Invent IcL
ValueList
指定したリストから文字を返す ※”,”から開始する事
w ##class(%PopulateUtils).ValueList(",藤原道長,紫式部,源倫子,一条天皇") // 源倫子
おわりに
今回、本記事を書くにあたり、%PopulateUtilsの各関数を覗いてみました。
「意味のあるテストデータを作成して使ってほしい。」 InterSystems社の意気込みを感じました。
皆様も、何かの折にこのクラスをみかけたら、覗いてみてください。
ただし英語だけどね!(笑