約 605,398 件
https://w.atwiki.jp/zacky/pages/13.html
変数型論理型 数値型 - 整数型 数値型 - 実数型 文字型 その他 配列 ポインタ 演算子 制御文繰返し 条件分岐 関数関数の基本 変数型 論理型 bool (boolean) 数値型 - 整数型 byte short int long 数値型 - 実数型 float double 文字型 char その他 unsigned 数値型において、0以上のみを扱う場合の用いる。 符号ビットが不要な分、扱える数値の上限が広がる。 String 変数の型ではなくchar配列のクラスとして実装されていることが多い。 配列 ポインタ 演算子 制御文 繰返し for while 条件分岐 if switch 条件 ? 式1 式2 関数 関数の基本 (戻り値の型) 関数名(引数){ 処理を記述 return 戻り値 ; }
https://w.atwiki.jp/mojimusume/pages/18.html
【文字娘学園】 ■文字娘たちが通う学校。小・中・高・大まであり基本エスカレート。 ■都内の私立校。文字娘たちは小学3年生。2クラス48人。 ■基本私服だが、制服はあり、式典の際のみ制服着用必須となる。 夏服 http //www45.atwiki.jp/mojimusume/?cmd=upload&act=open&page=%E3%83%AF%E5%A8%98&file=wa4.jpg 冬服 http //twitpic.com/5dvg0q end
https://w.atwiki.jp/tech_memo/pages/16.html
byte配列変換byte[] → string(16進数) byte[] → string(文字列) byte配列に変換 16進数、8進数、2進数の文字列を整数に変換 string作成+を使わないで固定の文字列を作成 int型の数字を16進数で表示 byte配列のコピー Array.Copy()Array.Copy メソッド (Array1, Array2, Int32) Array.Copy メソッド (Array1, Int32_1, Array2, Int32_2, Int32_3) コマンドライン実行コマンドラインの引数を取得1番目の方法と2番目の方法の違い 他のアプリケーションの実行 変換 byte配列変換 byte[] → string(16進数) string data = BitConverter.ToString(byte[]); ToString以外にもToIntなどもあるので変換にはこれを使う byte[] → string(文字列) Encoding.[変換したい文字形式(ASCⅡなど)].GetString(byte配列) byte配列に変換 byte[] data = BitConverter.GetBytes(); カッコ内には全ての変数を入れることができる 16進数、8進数、2進数の文字列を整数に変換 int data2 = Convert.ToInt32("01010101010", 2); int data8 = Convert.ToInt32("1750", 8); int data16 = Convert.ToInt32("1f50", 16); 文字整形 string作成 +を使わないで固定の文字列を作成 string data = string.Format( "作成したいフォーマット。Console.Writeと同じように作成できる", 入れ込みたいデータを順番通りに並べる ) int型の数字を16進数で表示 in data = 256; string dataMessage = data.Tostring("x4"); - 0100と表示される コピー byte配列のコピー Array.Copy() Array.Copy メソッド (Array1, Array2, Int32) Array1 コピー元 Array2 コピー先 Int32 コピーの個数 Array.Copy メソッド (Array1, Int32_1, Array2, Int32_2, Int32_3) Array1 コピー元 Int32_1 コピー開始位置_Array1 Array2 コピー先 Int32_2 コピー開始位置_Array2 Int32_3 コピーの個数 その他 コマンドライン実行 コマンドラインの引数を取得 static void Main(string[] args) { int i = 1; foreach (string cmds in args) { Console.WriteLine("{0}番目の引数 {1}", i, cmds); i++; } Console.WriteLine("2番目の方法"); string[] cmdsl = System.Environment.GetCommandLineArgs(); i = 1; foreach (string cmds in cmdsl) { Console.WriteLine("{0}番目の引数 {1}", i, cmds); i++; } Console.ReadLine(); } 1番目の方法と2番目の方法の違い 1番目の方法は、実行プログラムが先頭のstring配列に入らないのに対し、2番目の方法で入る >CommandLine.exe test1 test2 test3 1番目の引数 test1 2番目の引数 test2 3番目の引数 test3 2番目の方法 1番目の引数 CommandLine.exe 2番目の引数 test1 3番目の引数 test2 4番目の引数 test3 他のアプリケーションの実行 using System.Diagnostics; public class ProcessStart { static void Main() { // 実行ファイルを指定して実行 Process.Start(@"C \Program Files\Windows Media Player\mplayer2.exe"); // パラメータを指定して実行 Process.Start("notepad.exe", @"C \boot.ini"); // 拡張子が登録されているファイルを指定 Process.Start(@"C \boot.ini"); // URLを開く Process.Start("http //www.atmarkit.co.jp/fdotnet/"); // フォルダを開く Process.Start(@"C \"); } } このページを編集 上へ
https://w.atwiki.jp/plalayout/pages/15.html
運行形態 8の字型 8の字ポイントレールが必要かな?とも思いますが、 こんな風につくることもできます。 8の字ポイントを使うと小さくまとまります。
https://w.atwiki.jp/r-intro/pages/13.html
目次 目次 基本操作 文字列型ベクトルを作成する 文字型ベクトルの宣言と初期化 文字列の長さを得る 文字列を連結する 文字列を連結する 文字列を比較する 文字列の指定した一部を取り出す 文字列の前後の空白を取り除く 文字列を特定の文字または文字列で分割する 同じ文字列が繰り返された文字列を作る 文字列を一文字ずつ分割する バイト列を扱う 文字列型ベクトルの要素の文字列を連結する 文字列型ベクトルの要素の文字列を連結する strsplit関数とstr_split関数の動作の違い 文字コード 文字の文字コードを数値で得る 文字コードから文字を得る 現在の環境の文字コードの種類を得る 文字の文字コードを調べる 文字列から各文字の文字コードを得る 任意の文字コードから文字列を作成する 文字列の文字コードを調べる 区点番号からJISコードを得る JISコードから区点番号を得る 変換 文字列を数値に変換する 数値を文字列に変換する 英字を大文字(小文字)に変換する 文字の全角半角変換 文字列の文字コードを変換する iconv関数で文字列を変換するとバイト列の先頭に「FE FF」や「1B 24 42」が付く その他 エスケープシーケンスによる文字を表示する 指定された数の空白(0x20)からなる文字列を得る 文字列を特定の文字または文字列で分割する CIDから文字を得る 文字からCIDを得る 連番による連続した文字列を作成する 絶対パスを表す文字列からファイル名(ディレクトリ名)だけを取り出す ランダムに作成された文字列を得る ランダムに作成された文字列を得る ランダムに作成された文字列を得る 文字列のハッシュ値を得る 基本操作 文字列型ベクトルを作成する 文字列を二重引用符”で囲んで文字列リテラルを作り、c関数でベクトル化して代入演算子<-で代入する。 s - "ABC" print(s) [1] "ABC" s - c("ABC", "あいう", "阿伊宇abc") print(s) [1] "ABC" "あいう" "阿伊宇abc" 文字型ベクトルの宣言と初期化 文字や文字列を扱うための変数(ベクトル)を使うには、その文字列を格納する領域を用意して、それに名前を付ける必要がある。これを宣言という。 二重引用符”で囲んだ文字の並びを文字列リテラルといい、この文字列リテラルをc関数などを使うことにより宣言する。二重引用符の間に何も含まれない場合は、長さ0の文字列となる。 s エラー オブジェクト s がありません s - "あいう" print(s) [1] "あいう" s - c("A", "AB", "", "あ") print(s) [1] "A" "AB" "" "あ" character関数に数値を与えると、長さが0の文字列を指定した個数だけ作成する。文字列を1つも含まない文字型ベクトルを作るには引数に0を与える。ベクトルの長さを得るにはlength関数を使う。 length(c("A", "AB", "あ", "z")) [1] 4 character(3) [1] "" "" "" length(character(3)) [1] 3 character(0) character(0) length(character(0)) [1] 0 文字列の長さを得る nchar関数を使う。typeオプションに指定したいずれかの値で結果が変わる。なお、以下はWindows版で実行している。 bytes…バイト数 chars…文字の個数 width…画面表示される文字の幅(いわゆる半角は1、全角は2) s - c("ABC", "あいう", "阿伊宇abc") nchar(s, type = "bytes") [1] 3 6 9 nchar(s, type = "chars") [1] 3 3 6 nchar(s, type = "width") [1] 3 6 9 bytesとwidthは同じに見えるが、それはWindows環境下では日本語文字が1文字当たり2バイトだからであり、例えばutf-8(1文字3バイト)であれば以下のようになる。Windows環境下であるので一部は動作しない。 s - iconv("あ亜", from = "CP932", to = "utf-8") charToRaw(s) [1] e3 81 82 e4 ba 9c nchar(s, type = "bytes") [1] 6 nchar(s, type = "chars") nchar(s, type = "chars") でエラー invalid multibyte string, element 1 nchar(s, type = "width") [1] NA 文字列を連結する paste関数を使う。オプションを特に指定しないと空白(0x20)で引数に与えた文字列リテラルを連結する。単純に連結したいのであればsepオプションに""を指定する。 s1 - "ABC" s2 - "あいう" s3 - "阿伊宇abc" paste(s1, s2, s3) [1] "ABC あいう 阿伊宇abc" paste(s1, s2, s3, sep = "") [1] "ABCあいう阿伊宇abc" 文字列を連結する paste関数を使う。オプションを特に指定しないと空白(0x20)で引数に与えた文字列リテラルを連結する。単純に連結したいのであればsepオプションに""を指定する。 s1 - "ABC" s2 - "あいう" s3 - "阿伊宇abc" paste(s1, s2, s3) [1] "ABC あいう 阿伊宇abc" paste(s1, s2, s3, sep = "") [1] "ABCあいう阿伊宇abc" paste0関数を使ってもよい。paste0関数はpaste関数のsepオプションがデフォルトで""を指定された状態で実行される。 s - c("ABC", "123", "あいう") paste(s, sep = "") [1] "ABC" "123" "あいう" paste0(s) [1] "ABC" "123" "あいう" なお、paste関数もpaste0関数も、引数は文字列に強制変換してから処理する(最初にas.character関数を使用するのと同等)。 paste(1 10) [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" paste(c(1.1, 2.2, -3.3, 4.44)) [1] "1.1" "2.2" "-3.3" "4.44" 引数の処理は少々複雑で、与えた引数の文字列ベクトルを連結することもできるし、その文字列ベクトル内の文字列を連結させることもできる。前者の区切り文字はsepオプションに、後者の区切り文字はcollapseオプションに指定する。二つを同時にも処理することができる。 s1 - c("ABC", "123", "あいう") s2 - c("DEF", "456", "えお") paste(s1, s2, sep = "") [1] "ABCDEF" "123456" "あいうえお" paste(s1, s2, sep = "", collapse = "") [1] "ABCDEF123456あいうえお" paste(s1, s2, sep = ";", collapse = "@") [1] "ABC;DEF@123;456@あいう;えお" paste0(s1, s2, collapse = "") [1] "ABCDEF123456あいうえお" paste0(s1, s2, collapse = "@") [1] "ABCDEF@123456@あいうえお" 文字列を比較する ==演算子を使う。完全に一致すればTRUE、一文字でも異なればFALSEを返す。 "A" == "A" [1] TRUE "A" == "B" [1] FALSE "ABC" == "ABC" [1] TRUE "ABc" == "ABC" [1] FALSE "ABC" == "ABCD" [1] FALSE "ABCD" == "ABC" [1] FALSE ベクトルを利用した比較もできる。 s1 - c("A", "B", "C") s2 - c("A", "B", "c") s1 == s2 [1] TRUE TRUE FALSE 文字列の指定した一部を取り出す substr関数を使う。引数には抜き出す文字列の何文字目(1~)から何文字目までと指定する。 s - c("ABCDEFG", "あいうえお", "阿伊ab") substr(s, 2, 4) [1] "BCD" "いうえ" "伊ab" 何文字目の指定にめちゃくちゃな値を与えると、取り出せる分を取り出してくれる。 substr(s, 2, -2) [1] "" "" "" substr(s, -3, 2) [1] "AB" "あい" "阿伊" substr(s, 2, 10) [1] "BCDEFG" "いうえお" "伊ab" ベクトルの機能を活用すれば、例えば後ろから2文字だけ抜き出すといったこともできる。 substr(s, nchar(s) - 1, nchar(s)) [1] "FG" "えお" "ab" 文字列の前後の空白を取り除く trimws関数を使う。オプションを特に指定しなければ、文字列の前後の空白(とタブ(0x09)と復帰(CR,\r,0x0d)と改行(LF,\n,\x0a))を取り除く。第二引数に"left"と"right"をそれぞれ指定すると、前の空白だけ、後ろの空白だけを取り除く。デフォルトは両方(both)となっている。 s - " Hello. " trimws(s) [1] "Hello." trimws(s, "left") [1] "Hello. " trimws(s, "right") [1] " Hello." なお、いわゆる全角空白(0x8140)はそのままでは取り除くことができない。 s - " あいうえお " trimws(s) [1] " あいうえお" ヘルプによると、whitespaceオプションに取り除く文字を正規表現で指定し、その指定に従って取り除いているとのこと。デフォルトは"[ \t\r\n]"。これに全角空白分を加えた文字列を指定すると、全角空白も同時に取り除くことができる。以下は、シフトJISの環境で行った例。 trimws(s, whitespace = "[ \t\r\n]") [1] " あいうえお" trimws(s, whitespace = "[ \t\r\n ]") [1] "あいうえお" trimws(s, whitespace = "[ \t\r\n\x81\x40]") [1] "あいうえお" 文字列を特定の文字または文字列で分割する strsplit関数を使う。分割する文字列はベクトルで与えることができる。戻り値はリスト。分割させる文字または文字列は正規表現で指定することができる。 s - c("A B C", " D E F ") strsplit(s, " ") [[1]] [1] "A" "B" "C" [[2]] [1] "" "D" "E" "" "F" 上の例では、1つの空白(0x20)で分割しようとしたが、ベクトルの2番目の要素は与えた文字列の先頭や最後に空白が含まれており、文字間の空白も1つ以上のため、分割がうまくいっていない。このような場合はあらかじめ前後の空白をtrimws関数で取り除き、正規表現のパターンを「[ ]+」(1つ以上の連続した空白(0x20))とすればよい。 strsplit(trimws(s), "[ ]+") [[1]] [1] "A" "B" "C" [[2]] [1] "D" "E" "F" strsplit関数の戻り値はリストであり、これをベクトルにする場合はunlist関数を使う。 unlist(strsplit(trimws(s), "[ ]+")) [1] "A" "B" "C" "D" "E" "F" 規則性なく空白が含まれるCSVの文字列の場合は、以下のような分割パターンを正規表現で与えれば、うまく分割することができる。 s - " A, B,C " strsplit(trimws(s), "[ ,]+") [[1]] [1] "A" "B" "C" 同じ文字列が繰り返された文字列を作る そのような機能を実現する演算子や関数はRには標準で搭載されていない。paste関数とrep関数を組み合わせて使う。 paste(rep("A", 3), collapse = "") [1] "AAA" paste(rep("Abc", 4), collapse = "") [1] "AbcAbcAbcAbc" 文字列を一文字ずつ分割する strsplit関数を使う。第一引数に文字列を、第二引数に "" を指定すると、一文字ずつ分割する。 s - "ABc あいう" strsplit(s, "") [[1]] [1] "A" "B" "c" " " "あ" "い" "う" strsplit関数の引数はベクトルを受け付けるため、戻り値は与えたベクトルごとに分けてリストで戻る。unlist関数を使うことで戻り値をベクトルに変換することができる。 strsplit(c("ABC", "123"), "") [[1]] [1] "A" "B" "C" [[2]] [1] "1" "2" "3" unlist(strsplit(s, "")) [1] "A" "B" "c" " " "あ" "い" "う" 文字列の先頭や末尾の空白もきちんと一文字ずつ分解する。 unlist(strsplit(" あい う 12 ", "")) [1] " " "あ" "い" " " " " "う" " " "1" "2" " " " " バイト列を扱う 数値や文字などの情報を、8ビットずつ区切って表したものがバイト列。Rで扱うにはロウ型を使う。 rw - as.raw(c(1, 2, 0xa)) print(rw) [1] 01 02 0a as.integer(rw) [1] 1 2 10 as.integer(rw) + 20 [1] 21 22 30 文字列をロウ型に変換するにはcharToRaw関数を、ロウ型を文字列に変換するにはrawToChar関数を使う。 rw - charToRaw("ABC123") print(rw) [1] 41 42 43 31 32 33 as.raw(as.integer(rw) + 1) [1] 42 43 44 32 33 34 rawToChar(as.raw(as.integer(rw) + 1)) [1] "BCD234" 日本語も扱える。以下は、UTF-8の環境下で行った例。 rw - charToRaw("ABあいう12") print(rw) [1] 41 42 e3 81 82 e3 81 84 e3 81 86 31 32 print(rw[3 5]) [1] e3 81 82 print(rawToChar(rw[3 5])) [1] "あ" 文字列型ベクトルの要素の文字列を連結する 文字列型ベクトル同士ではなく文字列型ベクトルの要素の文字列同士を連結するには、paste関数にcollapseオプションを付けて使う。paste関数は引数に与えたベクトルをベクトルで処理しようとするため、デフォルトでは与えたベクトル同士を連結しようとするが、collapseオプションを指定すると、与えた文字列型ベクトル内の文字列を連結する。文字列の間に何も挟みたくなければ""を指定する。 s - c("石見舞菜香", "優木かな", "和多田美咲") paste(s, sep = "") [1] "石見舞菜香" "優木かな" "和多田美咲" paste(s, collapse = "") [1] "石見舞菜香優木かな和多田美咲" paste(s, collapse = "_") [1] "石見舞菜香_優木かな_和多田美咲" 文字列型ベクトルの要素の文字列を連結する 文字列型ベクトル同士ではなく文字列型ベクトルの要素の文字列同士を連結するには、stringrパッケージのstr_c関数にcollapseオプションを付けて使う。str_c関数は引数に与えたベクトルをベクトルで処理しようとするため、デフォルトでは与えたベクトル同士を連結しようとするが、collapseオプションを使うと、与えた文字列型ベクトルの要素同士を連結する。文字列の間に何も挟みたくなければ""を指定する。 library(stringr) s - c("石見舞菜香", "優木かな", "和多田美咲") str_c(s) [1] "石見舞菜香" "優木かな" "和多田美咲" str_c(s, collapse = "") [1] "石見舞菜香優木かな和多田美咲" str_c(s, collapse = "_") [1] "石見舞菜香_優木かな_和多田美咲" strsplit関数とstr_split関数の動作の違い strsplit関数とstringrパッケージのstr_split関数は、どちらも正規表現を使用して文字列を分割する関数だが、動作が若干異なる。以下の例のとおり、分割に指定した文字が文字列の最後に存在すると、strsplit関数はその最後の分割された文字列("")を返すことを省略するので注意。どちらも戻り値はリストである。 s - character(5) s[1] - "//ウマ娘/アグネスデジタル/鈴木みのり" s[2] - "/ウマ娘/ライスシャワー/石見舞菜香" s[3] - "ウマ娘/メイショウドトウ/和多田美咲" s[4] - "ウマ娘/サクラチヨノオー/野口瑠璃子/" s[5] - "ウマ娘/メジロアルダン/会沢紗弥//" strsplit(s, "/") [[1]] [1] "" "" "ウマ娘" "アグネスデジタル" "鈴木みのり" [[2]] [1] "" "ウマ娘" "ライスシャワー" "石見舞菜香" [[3]] [1] "ウマ娘" "メイショウドトウ" "和多田美咲" [[4]] [1] "ウマ娘" "サクラチヨノオー" "野口瑠璃子" [[5]] [1] "ウマ娘" "メジロアルダン" "会沢紗弥" "" stringr str_split(s, "/") [[1]] [1] "" "" "ウマ娘" "アグネスデジタル" "鈴木みのり" [[2]] [1] "" "ウマ娘" "ライスシャワー" "石見舞菜香" [[3]] [1] "ウマ娘" "メイショウドトウ" "和多田美咲" [[4]] [1] "ウマ娘" "サクラチヨノオー" "野口瑠璃子" "" [[5]] [1] "ウマ娘" "メジロアルダン" "会沢紗弥" "" "" どちらの関数も、分割する文字列の指定に正規表現を使うことができる。 s - character(3) s[1] - "ウオッカ/大橋彩香" s[2] - "ゴールドシチー//香坂さき" s[3] - "スーパークリーク///優木かな" str_split(s, "/+") [[1]] [1] "ウオッカ" "大橋彩香" [[2]] [1] "ゴールドシチー" "香坂さき" [[3]] [1] "スーパークリーク" "優木かな" strsplit(s, "/+") [[1]] [1] "ウオッカ" "大橋彩香" [[2]] [1] "ゴールドシチー" "香坂さき" [[3]] [1] "スーパークリーク" "優木かな" str_split_1関数は機能はほぼ同じで戻り値がベクトルになる関数。ただし、要素数が1つのベクトルしか扱うことができない。 str_split_1(s, "/+") Error in `str_split_1()` ! `string` must be a single string, not a character vector. Run `rlang last_trace()` to see where the error occurred. str_split_1(s[1], "/+") [1] "ウオッカ" "大橋彩香" 文字コード 文字の文字コードを数値で得る charToRaw関数で文字をロウ型に変換し、それをas.integer関数で数値型に変換することで得られる。得られた文字コードの数値の値は、as.raw関数でロウ型に変換し、rawToChar関数で文字型に変換することで文字に戻すことができる。以下は、文字「A」(0x41)を数値型に変換し、その値に1を足して文字の「B」(0x42)を得た例。 r - charToRaw("A") r [1] 41 n - as.integer(r) n [1] 65 rawToChar(as.raw(65 + 1)) [1] "B" 文字列にもそのまま使うことができる。 n - as.integer(charToRaw("ABCabc")) n [1] 65 66 67 97 98 99 rawToChar(as.raw(n + 1)) [1] "BCDbcd" 日本語文字にも使える。「阿」、「伊」はそれぞれシフトJISで0x88a2、0x88c9。charToRaw関数の戻り値はロウ型であることに注意。 Sys.getlocale() [1] "LC_COLLATE=Japanese_Japan.932;LC_CTYPE=Japanese_Japan.932;LC_MONETARY=Japanese_Japan.932;LC_NUMERIC=C;LC_TIME=Japanese_Japan.932" s - c("A", "ab", "あい", "阿伊123") for (i in 1 length(s)) print(charToRaw(s[i])) [1] 41 [1] 61 62 [1] 82 a0 82 a2 [1] 88 a2 88 c9 31 32 33 for (i in 1 length(s)) print(as.integer(charToRaw(s[i]))) [1] 65 [1] 97 98 [1] 130 160 130 162 [1] 136 162 136 201 49 50 51 文字コードから文字を得る rawToChar関数にロウ型で文字コードを与えればよい。以下はShift-JIS環境で実行した例。ASCIIコードで「A」は0x41、「1」は0x31、Shift-JISでは「朝」は0x92a9、「昼」は0x928b、「夜」は0x96e9。 rawToChar(as.raw(c(0x41, 0x31))) [1] "A1" rawToChar(as.raw(c(0x92, 0xa9, 0x92, 0x8b, 0x96, 0xe9))) [1] "朝昼夜" rawToChar(as.raw(c(0x0d, 0x0a))) [1] "\r\n" エスケープシーケンスによる文字はそれが分かるように表示され、文字として割り当てられていない値の場合は、与えた値がそのまま返される。 rawToChar(as.raw(c(0x0d, 0x0a))) [1] "\r\n" rawToChar(as.raw(c(0xff, 0x0a))) [1] " ff \n" rawToChar(as.raw(c(0xff, 0xfe))) [1] " ff fe " rawToChar(as.raw(c(0x92, 0xff))) [1] " 92 ff " 現在の環境の文字コードの種類を得る localeToCharset関数を使う。引数に何も与えないと、現在の環境の、文字コードの種類を返す。 例えば、Windows版のバージョン4.1.3であれば、以下のようになるはず。 localeToCharset() [1] "CP932" Windows版のバージョン4.2.2であれば、以下のようになるはず。 localeToCharset() [1] "UTF-8" ロケールが返されるのではなく、文字コードの種類が返されることに注意。 文字の文字コードを調べる charToRaw関数を使う。以下は、Windows環境下(シフトJIS)で行った例。 r - charToRaw("か") r [1] 82 a9 r + 1 r + 1 でエラー 二項演算子の引数が数値ではありません n - as.integer(r) n [1] 130 169 rawToChar(as.raw(c(130, 169))) [1] "か" 文字列にも使える。 charToRaw("あいうABC阿伊宇") [1] 82 a0 82 a2 82 a4 41 42 43 88 a2 88 c9 89 46 n - as.integer(charToRaw("あいうABC阿伊宇")) n [1] 130 160 130 162 130 164 65 66 67 136 162 136 201 137 70 rawToChar(as.raw(n)) [1] "あいうABC阿伊宇" 文字列から各文字の文字コードを得る iconv関数で指定の文字列を変換してそれをcharToRaw関数でロウ型に変換すると文字コードがバイト列で表示される。 Sys.getlocale() [1] "LC_COLLATE=Japanese_Japan.utf8;LC_CTYPE=Japanese_Japan.utf8;LC_MONETARY=Japanese_Japan.utf8;LC_NUMERIC=C;LC_TIME=Japanese_Japan.utf8" charToRaw(iconv("阿", to = "ISO-2022-JP")) # JIS [1] 1b 24 42 30 24 charToRaw(iconv("阿", to = "SJIS")) # シフトJIS [1] 88 a2 charToRaw(iconv("阿", to = "UTF-8")) # UTF-8 [1] e9 98 bf charToRaw(iconv("阿", to = "UTF-16")) # UTF-16(ビッグエンディアン) [1] fe ff 96 3f charToRaw(iconv("阿", to = "UTF-16BE")) # UTF-16(ビッグエンディアン) [1] 96 3f charToRaw(iconv("阿", to = "UTF-16LE")) # UTF-16(リトルエンディアン) [1] 3f 96 charToRaw(iconv("阿", to = "unicodeFFFE")) # Unicode [1] 96 3f iconv関数に与える文字は文字列でもかまわない。ただし、要素が1つだけ(長さが1)の文字ベクトルでなければならない。 charToRaw(iconv("阿位鵜", to = "SJIS")) [1] 88 a2 88 ca 89 4c charToRaw(iconv(c("阿位", "鵜江"), to = "SJIS")) [1] 88 a2 88 ca 警告メッセージ charToRaw(iconv(c("阿位", "鵜江"), to = "SJIS")) で 引数は長さ 1 の文字ベクトルである必要があります 最初の要素以外は全て無視されます 任意の文字コードから文字列を作成する iconv関数、rawToChar関数、as.raw関数を組み合わせて使用する。以下は文字コードがUTF-8の環境で行った例。toオプションを省略すると自動的に現在の環境のUTF-8て出力されるため、以下の例ではtoオプションは省略可能。それぞれ順番にシフトJIS、UTF-8、UTF-16(ビッグエンディアン)、UTF-16(ビッグエンディアン)、UTF-16(リトルエンディアン)、Unicodeの文字コード(バイト列)からにそれぞれ文字列「阿位」を作成している。 Sys.getlocale() [1] "LC_COLLATE=Japanese_Japan.utf8;LC_CTYPE=Japanese_Japan.utf8;LC_MONETARY=Japanese_Japan.utf8;LC_NUMERIC=C;LC_TIME=Japanese_Japan.utf8" iconv(rawToChar(as.raw(c(0x88, 0xa2, 0x88, 0xca))), from = "SJIS", to = "UTF-8") [1] "阿位" iconv(rawToChar(as.raw(c(0xe9, 0x98, 0xbf, 0xe4, 0xbd, 0x8d))), from = "UTF-8", to = "UTF-8") [1] "阿位" iconv(rawToChar(as.raw(c(0x96, 0x3f, 0x4f, 0x4d))), from = "UTF-16", to = "UTF-8") [1] "阿位" iconv(rawToChar(as.raw(c(0x96, 0x3f, 0x4f, 0x4d))), from = "UTF-16BE", to = "UTF-8") [1] "阿位" iconv(rawToChar(as.raw(c(0x3f, 0x96, 0x4d, 0x4f))), from = "UTF-16LE", to = "UTF-8") [1] "阿位" iconv(rawToChar(as.raw(c(0x96, 0x3f, 0x4f, 0x4d))), from = "unicodeFFFE", to = "UTF-8") [1] "阿位" 文字列の文字コードを調べる iconv関数を使う。iconv関数は第1引数に指定した文字列を、toオプションに指定した文字コードに変換する。toオプションだけを指定した場合は変換後の文字列をそのまま返すが、実行環境と文字コードが合わない場合は表示が乱れるので注意。TRUEを指定したtoRawオプションを付けると、戻り値はロウ型になりバイト列で表示されるため、このオプションを使用した利用が推奨される。 以下は、「石見舞菜香」という5つの漢字からなる文字列について、文字コードをバイト列で表示した例。なお、各漢字のそれぞれの文字コードは以下のとおり。実行した環境の文字コードはUTF-8で、JISコードとシフトJISにそれぞれ変換している。toRawオプションにTRUEを指定した場合の戻り値はロウ型かつリストであることに注意。ロウ型はバイト列で表示される。 漢字 JISコード シフトJIS UTF-8 石 0x4050 0x90ce 0xe79fb3 見 0x382b 0x8ca9 0xe8a68b 舞 0x4971 0x9591 0xe8889e 菜 0x3a5a 0x8dd8 0xe88f9c 香 0x3961 0x8d81 0xe9a699 実行例は以下のとおり。 Sys.getlocale() [1] "LC_COLLATE=Japanese_Japan.utf8;LC_CTYPE=Japanese_Japan.utf8;LC_MONETARY=Japanese_Japan.utf8;LC_NUMERIC=C;LC_TIME=Japanese_Japan.utf8" iconv("石見舞菜香", to = "ISO-2022-JP") [1] "\033$B@P8+Iq Z9a" iconv("石見舞菜香", to = "ISO-2022-JP", toRaw = TRUE) [[1]] [1] 1b 24 42 40 50 38 2b 49 71 3a 5a 39 61 iconv("石見舞菜香", to = "SJIS", toRaw = TRUE) [[1]] [1] 90 ce 8c a9 95 91 8d d8 8d 81 iconv("石見舞菜香", to = "UTF-8", toRaw = TRUE) [[1]] [1] e7 9f b3 e8 a6 8b e8 88 9e e8 8f 9c e9 a6 99 iconv関数は現在の環境の文字コードに関係なく、引数に与えた任意の文字コードからなる文字列を、任意の文字コードまたは任意の文字コードによる文字列に変換する関数。よって、以下の例のようにUTF-8環境下でシフトJISに相当するバイト列をロウ型で与えてfromオプションにシフトJISを指定することで、任意の文字コードを変換することができる。最後の例では、符号化文字集合の切り替えを示すエスケープシーケンス(0x1b 0x24 0x42)が先頭に付けられていることに注意。 ra - as.raw(c(0x95, 0x91, 0x8d, 0xd8, 0x8d, 0x81)) iconv(rawToChar(ra), from = "SJIS", to = "UTF-8") [1] "舞菜香" iconv(rawToChar(ra), from = "SJIS", to = "UTF-8", toRaw = TRUE) [[1]] [1] e8 88 9e e8 8f 9c e9 a6 99 iconv(rawToChar(ra), from = "SJIS", to = "ISO-2022-JP", toRaw = TRUE) [[1]] [1] 1b 24 42 49 71 3a 5a 39 61 iconv関数の第1引数にベクトルで文字列を与えると、それぞれ変換した値を返す。 iconv(c("石見舞菜香", "和多田美咲"), to = "SJIS", toRaw = TRUE) [[1]] [1] 90 ce 8c a9 95 91 8d d8 8d 81 [[2]] [1] 98 61 91 bd 93 63 94 fc 8d e7 区点番号からJISコードを得る 以下の自作関数kutenToJisは、区点番号を与えるとそのJISコードを返す。 kutenToJis - function(ku, ten) { s12 - as.hexmode(ku + 0x20) s34 - as.hexmode(ten + 0x20) s - sprintf("0x%s%s", s12, s34) return(as.integer(s)) } 以下の2つの漢字で動作確認をする。 美 - 区点番号:4094, JISコード:0x487e(10進数 18558) 雲 - 区点番号:1732, JISコード:0x3140(10進数 12608) 動作例。 kutenToJis - function(ku, ten) { + s12 - as.hexmode(ku + 0x20) + s34 - as.hexmode(ten + 0x20) + s - sprintf("0x%s%s", s12, s34) + return(as.integer(s)) + } kutenToJis(40, 94) [1] 18558 jis - kutenToJis(40, 94) print(jis) [1] 18558 print(as.hexmode(jis)) [1] "487e" jis - kutenToJis(17, 32) print(jis) [1] 12608 print(as.hexmode(jis)) [1] "3140" JISコードから区点番号を得る 以下の自作関数kutenToJisは、JISコードを与えると区点番号を返す。 jisToKuten - function(jis) { s - sprintf("%04x", jis) n1 - as.integer(sprintf("0x%s", substr(s, 1, 2))) - 0x20 n2 - as.integer(sprintf("0x%s", substr(s, 3, 4))) - 0x20 return(c(n1, n2)) } 以下の2つの漢字で動作確認をする。 美 - JISコード:0x487e(10進数 18558), 区点番号:4094 雲 - JISコード:0x3140(10進数 12608), 区点番号:1732 動作例。 jisToKuten - function(jis) { + s - sprintf("%04x", jis) + n1 - as.integer(sprintf("0x%s", substr(s, 1, 2))) - 0x20 + n2 - as.integer(sprintf("0x%s", substr(s, 3, 4))) - 0x20 + return(c(n1, n2)) + } kuten - jisToKuten(0x487e) print(kuten) [1] 40 94 length(kuten) [1] 2 kuten - jisToKuten(12608) print(kuten) [1] 17 32 length(kuten) [1] 2 変換 文字列を数値に変換する as.numeric関数を使う。 s - c("1", "2.2", "-3.3") as.numeric(s) [1] 1.0 2.2 -3.3 s - c("A", "2.2", "- 3.3") as.numeric(s) [1] NA 2.2 NA 警告メッセージ 強制変換により NA が生成されました 数値に変換できる文字列は浮動小数点数に変換される。数値に変換できない文字列はNAになる。 整数もしくは浮動小数点数に恣意的に変換したい場合はas.integer関数もしくはas.double関数を使う。 s - c("0", "1", "2.2", "-3.3") as.integer(s) [1] 0 1 2 -3 as.double(s) [1] 0.0 1.0 2.2 -3.3 数値を文字列に変換する 簡単に変換するならas.character関数、変換時に書式を指定したいのであればsprintf関数を使う。 n - c(1, 2, -4) d - c(1.1, 0.1, -2.2) as.character(n) [1] "1" "2" "-4" as.character(d) [1] "1.1" "0.1" "-2.2" sprintf("%03d", n) [1] "001" "002" "-04" sprintf("%+04d", n) [1] "+001" "+002" "-004" sprintf("%8.4f", d) [1] " 1.1000" " 0.1000" " -2.2000" 英字を大文字(小文字)に変換する toupper関数とtolower関数は、引数に指定した文字型データに含まれる英字を、それぞれ一括で大文字、小文字に変換する。英字ではない文字は変換せずにそのまま返す。 s - c("A", "bc", "D E", "あ い") toupper(s) [1] "A" "BC" "D E" "あ い" tolower(s) [1] "a" "bc" "d e" "あ い" 文字の全角半角変換 stringiパッケージのstri_trans_general関数を使う。以下、変換例。 library(stringi) s - c("あい", "宇", "イヌ", "ネコ", "AB@", "CD{", "12", "34") stri_trans_general(s, "Halfwidth-Fullwidth") [1] "あい" "宇" "イヌ" "ネコ" "AB@" "CD{" "12" "34" stri_trans_general(s, "Fullwidth-Halfwidth") [1] "あい" "宇" "イヌ" "ネコ" "AB@" "CD{" "12" "34" 全角→半角変換には"Fullwidth-Halfwidth"を、半角→全角変換には"Halfwidth-Fullwidth"を指定する。英数字、カタカナ、記号など変換できるものはすべて変換するので注意。該当しない文字(ひらがな、漢字)は変換されない。 文字列の文字コードを変換する iconv関数を使う。以下の例では、シフトSJISの環境下で、以下の3行からなるUTF-8(改行コードはCR+LF)で保存されたテキストファイル(ファイル名はutf8.txt)を直接読み込み、それをUTF-8からシフトJISに保存をしている。 ABC あいう 阿位宇 ファイルを読み込み、文字列を変換する。 scan("utf8.txt", what = character(), fileEncoding = "UTF-8") Read 3 items [1] "ABC" "あいう" "阿位宇" ch - readChar("utf8.txt", 27, useBytes = TRUE) print(ch) [1] "ABC\r\n縺ゅ>縺 86 \r\n髦ソ菴榊ョ 87 \r\n" iconv(ch, from = "UTF-8", to = "SJIS") [1] "ABC\r\nあいう\r\n阿位宇\r\n" iconv関数で文字列を変換するとバイト列の先頭に「FE FF」や「1B 24 42」が付く 「FE FF」はUnicodeにおけるBOM(バイトオーダーマーク)、「1B 24 42」はJISコードにおけるエスケープシーケンス。 UnicodeのUTF-16では、文字列を表現するバイト列のそのバイトの格納する順番を指定することができ、上位バイトを先に記述することをビッグエンディアン、下位バイトを先に記述する方法をリトルエンディアンという。「あ」(JIS:0x2422、UTF-16:0x3042)と「亜」(JIS:0x3021、UTF-16:0x4E9c)の二文字を使って試してみる。 以下は、シフトJIS(CP932)の環境で、文字列「あ亜」をUTF-16に変換した例。 charToRaw(iconv("あ亜", from = "CP932", to = "UTF-16")) [1] fe ff 30 42 4e 9c charToRaw(iconv("あ亜", from = "CP932", to = "UTF-16BE")) [1] 30 42 4e 9c charToRaw(iconv("あ亜", from = "CP932", to = "UTF-16LE")) [1] 42 30 9c 4e 1番目の例ではエンディアンを指定しないため、「FE FF」(関数の戻り値は小文字で「fe ff」)が付けられてビッグエンディアンであることが明示されている。2番目はビッグエンディアンを指定、3番目はリトルエンディアンを指定した例。 同様にJISコード(ISO-2022-JP)に変換してみる。 charToRaw(iconv("あ亜", from = "CP932", to = "ISO-2022-JP")) [1] 1b 24 42 24 22 30 21 「あ亜」のバイト列(24 22 30 21)の前に「1B 24 42」(関数の戻り値は小文字で「1b 24 42」)が付けられている。これは以降のバイト列がJISコードによる文字列であることを明示するためのバイト列。UTF-16と異なり、iconv関数でJISコードへの変換時にエスケープシーケンスを付けないようにすることはできない。 その他 エスケープシーケンスによる文字を表示する \n(改行)や\r(復帰)などが含まれている文字列は、ただ表示させると、その拡張表記のままに表示されてしまう。 s1 - "Hi." s2 - "Hello.\n" s3 - "Hi.\rHello." cat(s1) Hi. cat(s2) Hello. cat(s3) Hi. Hello. print関数を使うと、拡張表記による文字は、その拡張表記そのままに¥記号を使って表示する。 print(s1) [1] "Hi." print(s2) [1] "Hello.\n" print(s3) [1] "Hi.\rHello." 指定された数の空白(0x20)からなる文字列を得る C#でいうところのStrings.Spaceメソッド。そのような機能を持つ関数はRには標準で搭載されていないためその機能を持つ関数を自作する。以下の3行がその自作関数。 space - function(n) { return(paste(rep(" ", n), collapse = "")) } 試しに使ってみる space(5) [1] " " paste("A", space(1), "B", space(2), "C", sep = "") [1] "A B C" 文字列を特定の文字または文字列で分割する stringrパッケージのstr_split関数を使う。分割する文字列はベクトルで与えることができる。戻り値はリスト。分割させる文字または文字列は正規表現で指定することができる。 library(stringr) s - c("A B C", " D E F ") str_split(s, " ") [[1]] [1] "A" "B" "C" [[2]] [1] "" "D" "E" "" "F" "" 上の例では、1つの空白(0x20)で分割しようとしたが、ベクトルの2番目の要素は与えた文字列の先頭や最後に空白が含まれており、文字間の空白も1つ以上のため、分割がうまくいっていない。このような場合はあらかじめ前後の空白をtrimws関数で取り除き、正規表現のパターンを「[ ]+」(1つ以上の連続した空白(0x20))とすればよい。 str_split(trimws(s), "[ ]+") [[1]] [1] "A" "B" "C" [[2]] [1] "D" "E" "F" strsplit関数の戻り値はリストであり、これをベクトルにする場合はunlist関数を使う。 unlist(str_split(trimws(s), "[ ]+")) [1] "A" "B" "C" "D" "E" "F" 規則性なく空白が含まれるCSVの文字列の場合は、以下のような分割パターンを正規表現で与えれば、うまく分割することができる。 unlist(str_split(trimws(s), "[ ,]+")) [1] "A" "B" "C" CIDから文字を得る ここからファイルaj17-kanji.txtをダウンロードしてカレントディレクトリに置き、以下のコマンドを実行する。 library(tidyverse) tbl - read_delim("aj17-kanji.txt", delim = "\t", comment = "#", col_names = FALSE, progress = FALSE, show_col_types = FALSE) cid0 - tbl[[1]] ucd0 - tbl[[19]] idx - which(nchar(ucd0) == 6) cid - cid0[idx] ucd - ucd0[idx] h1 - as.integer(as.hexmode(substr(ucd, 3, 4))) h2 - as.integer(as.hexmode(substr(ucd, 5, 6))) mx - matrix(c(h1, h2), ncol = 2) 上記は処理を簡単にするため、Unicodeが16進数表記で「U+」を除く4桁の文字のみ取り出している。CIDを指定して、文字を取り出してみる。最後の例のとおり、文字が割り当てられていないCIDを指定すると、文字列の空欄が返る。 idx - which(cid == 2000) # CIDの2000が示す文字は「江」 print(iconv(rawToChar(as.raw(mx[idx, ])), from = "unicodeFFFE")) [1] "江" idx - which(cid == 4000) # CIDの4000が示す文字は「輪」 print(iconv(rawToChar(as.raw(mx[idx, ])), from = "unicodeFFFE")) [1] "輪" idx - which(cid == 99999) # CIDの99999が示す文字は存在しない print(iconv(rawToChar(as.raw(mx[idx, ])), from = "unicodeFFFE")) [1] "" 文字からCIDを得る ここからファイルaj17-kanji.txtをダウンロードしてカレントディレクトリに置き、以下のコマンドを実行する。 library(tidyverse) tbl - read_delim("aj17-kanji.txt", delim = "\t", comment = "#", col_names = FALSE, progress = FALSE, show_col_types = FALSE) cid0 - tbl[[1]] ucd0 - tbl[[19]] idx - which(nchar(ucd0) == 6) cid - cid0[idx] ucd - ucd0[idx] h1 - as.integer(as.hexmode(substr(ucd, 3, 4))) h2 - as.integer(as.hexmode(substr(ucd, 5, 6))) mx - matrix(c(h1, h2), ncol = 2) s - character(nrow(mx)) for (i in 1 nrow(mx)) { + s[i] - iconv(rawToChar(as.raw(mx[i, ])), from = "unicodeFFFE") + } 上記は処理を簡単にするため、Unicodeが16進数表記で「U+」を除く4桁の文字のみ取り出している。文字を指定して、CIDを取り出してみる。最後の例のとおり、該当する文字がない場合は数値のNULLが返る。 idx - which(s == "江") # CIDの2000が示す文字は「江」 print(cid[idx]) [1] 2000 idx - which(s == "輪") # CIDの4000が示す文字は「輪」 print(cid[idx]) [1] 4000 idx - which(s == "𩸽") # サロゲートペアの文字は本整理では対象外 print(cid[idx]) numeric(0) 連番による連続した文字列を作成する 数値型ベクトルで連番を作成し、それをsprintf関数で加工して文字列に変換すればよい。連番は、1,2,3,…と001,002,003,…のような2種類があるが、sprintf関数で指定する書式文字列をうまく利用すれば、どちらも簡単に作ることができる。cat関数を使えば、ファイルに簡単に出力できる。 n - 1 3 sprintf("%d", n) [1] "1" "2" "3" sprintf("%04d", n) [1] "0001" "0002" "0003" s - sprintf("file%04d.jpg", n) print(s) [1] "file0001.jpg" "file0002.jpg" "file0003.jpg" cat(s, file = "temp.csv", sep = "\n") temp.csvの中身 file0001.jpg file0002.jpg file0003.jpg 絶対パスを表す文字列からファイル名(ディレクトリ名)だけを取り出す gsub関数を使う。以下はWindows環境下における絶対パス(区切り記号は「¥」)から、ファイル名とそれ以外のディレクトリ名をそれぞれ取り出した例。 s - c("C \\マクロス\\Δ\\カナメ.バッカニア.txt") gsub("^.+\\\\", "", s) [1] "カナメ.バッカニア.txt" gsub("\\\\[^\\]+$", "", s) [1] "C \\マクロス\\Δ" ランダムに作成された文字列を得る sample関数とpaste関数を組み合わせて使う。sample関数の第2引数に、得たい文字列の長さを指定する。 定数LETTERSとlettersにはそれぞれ英大文字と英小文字を含むベクトルのため、これらをそのまま利用すれば英大小文字だけからなるランダムな文字列を作成することができる。当然、記号を適当に含めれば、それらの文字列からなる任意の文字列を作成することができる。 LETTERS [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S" "T" "U" "V" "W" "X" "Y" "Z" letters [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" s - LETTERS paste(sample(s, 14, replace = TRUE), collapse = "") [1] "UJTMRBBANJHZHR" paste(sample(s, 14, replace = TRUE), collapse = "") [1] "PWYFPVJQHJGSNI" s - c(LETTERS, letters) paste(sample(s, 14, replace = TRUE), collapse = "") [1] "QjrFTEySFGwOEG" paste(sample(s, 14, replace = TRUE), collapse = "") [1] "SNRBuCpZdkqpIs" s - c(LETTERS, letters, "#", "$", "%", " ") paste(sample(s, 24, replace = TRUE), collapse = "") [1] "bEimcMQlAHCdRkc%m#GbfifS" paste(sample(s, 24, replace = TRUE), collapse = "") [1] "CVrUHSYWWRPwcrsXF StkSrK" ランダムに作成された文字列を得る stringiパッケージのstri_rand_strings関数を使う。一度に複数個をベクトルで得ることができる。 library(stringi) stri_rand_strings(1, 14) [1] "cJBFBNlLVvbqLQ" s - stri_rand_strings(3, 14) library(stringi) stri_rand_strings(1, 14) [1] "NJNxejqJl3dgYS" s - stri_rand_strings(3, 10) print(s) [1] "5Y4del2QiL" "9JK3rYewTL" "4IXEI2ADaN" ヘルプには、文字列の作成に使用される文字についての説明がある。 ?stri_rand_strings Usage stri_rand_strings(n, length, pattern = "[A-Za-z0-9]") 正規表現の書式を模した書式により、使用される文字列の指定ができる。デフォルトでは英大文字、英小文字、英数字だけだが、例えば、#、$、%、&の記号を4つ追加する場合は、以下のように指定をすればよい。$と&は書式を示す文字のため、前に¥を付けなければならないが、¥はエスケープシーケンスを表す記号でもあるため、前に「¥¥」と2つ続けて入力している。 stri_rand_strings(3, 14, pattern = "[a-z#\\$%\\ ]") [1] "yapn%u$iaguxyj" "#fnkunslor blp" "v nro mvxvpjke" 文字列はRの乱数の規則に則って作成される。そのため、乱数の種をset.seed関数で指定すると、作成される文字列を再現することができる。 stri_rand_strings(4, 6) [1] "O45lLP" "L0uBiZ" "XMpBOU" "UNdLx2" set.seed(6) stri_rand_strings(4, 6) [1] "bwGNoy" "xlV3du" "5IlFWg" "9hxp7E" stri_rand_strings(4, 6) [1] "kJMuHQ" "W7xl8v" "N3zlhi" "4wyp7Q" set.seed(6) stri_rand_strings(4, 6) [1] "bwGNoy" "xlV3du" "5IlFWg" "9hxp7E" stri_rand_strings(4, 6) [1] "kJMuHQ" "W7xl8v" "N3zlhi" "4wyp7Q" ランダムに作成された文字列を得る runif関数とpaste関数を組み合わせて使う。chベクトルには文字列にランダムで割り振る文字を指定し、lenベクトルには得たい文字列の長さを1つだけ指定する。ただし、この方法では一度に一つの文字列しか得ることはできない。 定数LETTERSとlettersにはそれぞれ英大文字と英小文字を含むベクトルのため、これらをそのまま利用すれば英大小文字だけからなるランダムな文字列を作成することができる。当然、記号を適当に含めれば、それらの文字列からなる任意の文字列を作成することができる。 len - 10 ch - LETTERS paste(ch[floor(runif(len, 1, length(ch) + 1))], collapse = "") [1] "WTHNZZCBIJ" paste(ch[floor(runif(len, 1, length(ch) + 1))], collapse = "") [1] "STATFLICHV" len - 20 ch - c(LETTERS, letters, "#", "$", "%", " ") paste(ch[floor(runif(len, 1, length(ch) + 1))], collapse = "") [1] "bBYEODy DlSZuKcaaykO" paste(ch[floor(runif(len, 1, length(ch) + 1))], collapse = "") [1] "hCYaqYkpWkDbP$HcAZPB" 文字列はRの乱数の規則に則って作成される。そのため、乱数の種をset.seed関数で指定すると、作成される文字列を再現することができる。 paste(ch[floor(runif(len, 1, length(ch) + 1))], collapse = "") [1] "XG#C#CwhHgBWKgyVdblP" set.seed(20) paste(ch[floor(runif(len, 1, length(ch) + 1))], collapse = "") [1] "xrPd$%FDSUoqApKZSGQt" paste(ch[floor(runif(len, 1, length(ch) + 1))], collapse = "") [1] "bBYEODy DlSZuKcaaykO" set.seed(20) paste(ch[floor(runif(len, 1, length(ch) + 1))], collapse = "") [1] "xrPd$%FDSUoqApKZSGQt" paste(ch[floor(runif(len, 1, length(ch) + 1))], collapse = "") [1] "bBYEODy DlSZuKcaaykO" 文字列のハッシュ値を得る opensslパッケージを使う。以下はハッシュ関数MD5、SHA-1、SHA-256でそれぞれハッシュ値を得た例。 s - c("セナディア", "鈴木みのり", "イレイナ", "本渡楓") openssl md5(s) [1] "b17b3d97c7f19375d1989eaa6d5d7f19" [2] "2cdcdf384125ac19c173e9517b23847b" [3] "df7909633e9e58c8fc61f7ddaa996264" [4] "9adf030a3e1852802deadb793c4eab0f" openssl sha1(s) [1] "226dda8c2f33794cdefaef027a43e48135abb6c3" [2] "728d6a009b1700f9759ed2b502a0f673820700d5" [3] "97fceb672478954169751379650c14b12f76d808" [4] "be0a600d132eccfb2ed41a0424189efe210e8dff" openssl sha256(s) [1] "e385677aa0a829d448251e47f3f6cfa4b82951c9df9b53658a29e71cbfb3125d" [2] "4a806bf1e967f0764841aabcb3e634316f4b19be1dc9244480cd2c26c315db2b" [3] "4bd95d8e4a10c946842b256f0b7f281d5db587161a8a5658ae3ab5c19543a222" [4] "443e41893a26ea324275a26f89a48812f7ac0b687bebf0baddadcd0996116405" digestパッケージのdigest関数でも得ることができるが、こちらは文字列を文字列型ベクトルで与えることができないため、最初の要素しか使用されない。 digest digest(s, algo = "md5", serialize = FALSE) [1] "b17b3d97c7f19375d1989eaa6d5d7f19" digest digest(s, algo = "sha1", serialize = FALSE) [1] "226dda8c2f33794cdefaef027a43e48135abb6c3" digest digest(s, algo = "sha256", serialize = FALSE) [1] "e385677aa0a829d448251e47f3f6cfa4b82951c9df9b53658a29e71cbfb3125d" digest digest("セナディア", algo = "sha256", serialize = FALSE) [1] "e385677aa0a829d448251e47f3f6cfa4b82951c9df9b53658a29e71cbfb3125d"
https://w.atwiki.jp/phlogiston/pages/215.html
ズィルバーランツェ 種族:人間 性別:男 年齢:?歳 身長:212cm 体重:109kg クラス:パライソ特殊部隊『ジャスティスカウンター』 属性:? 戦闘スタイル:野生的、槍術 イメージCV:立木文彦 「我らに矛を向ける正義のヒーローとやらの実力、見せてもらおうか!」 設定 悪の組織パライソの特殊精鋭部隊『ジャスティスカウンター』の1人。 部隊一の巨漢で、巨大な十文字型の穂先を持つ槍を悠々と使いこなす程の怪力。 だがそれに反して暴力的なところはなく、思慮深い性格の持ち主。 必要なことしか口にせず、行動で全てを示そうとする寡黙な武人。 得物としている槍には特殊な術が付加されており、その特性は槍本体及び所有者自身の損傷部分の高速自動修復である。 ゆえに跡形もなく吹っ飛ばされようとも、その時に槍が手元にさえあれば修復が可能 名前の意味は独語で「銀の槍」だが、グロウスバイルと同じくコードネームである。
https://w.atwiki.jp/mizcremorne/pages/184.html
llGetNumberOfNotecardLines key llGetNumberOfNotecardLines(string name) nameに指定した名前のノートカードの行数を調べるよう要求を出し、問い合わせ番号(key型)を返す。 要求の結果はdataserver?イベントにて受け取ることができる。 指定したノートカードはオブジェクトのコンテンツ内になければならない。 dataserver?イベントでは調べた結果がstring型の引数で渡されてくるが、これをinteger型にキャストすれば行数として扱うことができる。 以下の例はノートカード"hogehoge"の行数を調べる。 default { state_entry() { llGetNumberOfNotecardLines("hogehoge"); } dataserver(key queryid, string data) { integer lines = (integer)data; [[llSay]](0, "This notecard has " + (string)lines + " lines."); } } ノートカードの読取については「ノートを使おう(初級スクリプト第十二回)」の記事を参照。 名前 コメント
https://w.atwiki.jp/plalayout/pages/33.html
運行形態 Sの字型 ターンアウトレールと1/4レールの組み合わせが必要になります。 左右どちら回りにもできますが、ポイントを通過してしまうと、右回りになってバックしないで戻ることはありません。
https://w.atwiki.jp/aosora/pages/19.html
http //localhost/test.cgi?type=1 とかでtypeの値「1」を取り出す。 (test.cgi) #!/usr/local/bin/ruby require "cgi" $cgi = CGI.new() type=$cgi["type"] typeを数値として判定したいときは to_i を使って。
https://w.atwiki.jp/mixmusic/pages/25.html
C □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■ ■ANSI C言語 ライブラリ関数(標準関数) abort----------プロセスを意図的に異常終了させる abs----------int型データの絶対値を返す acos----------アークコサインを返す asctime----------構造体として格納されている時間を表示可能文字へ変換する asin----------アークサインを返す assert----------条件によりabort関数を呼び出して処理を中断させる atan----------アークタンジェントを返す atan2----------引数1/引数2 のアークタンジェントを返す atexit----------プログラム終了時に自動実行される関数を登録する atof----------文字列をdouble型変数に変換する atoi----------文字列をint型変数に変換する atol---------文字列をlong型変数に変換する bsearch------バイナリサーチ(二分探索)を行う calloc-------指定バイトのメモリ領域を指定個確保し、それへのポインタを返す(0で初期化) ceil---------数値結果を切り上げる clearerr-----指定ファイルポインタのエラーフラグとEOFフラグをクリアする clock--------プログラム実行時間開始からの経過時間を得る cos----------コサイン値を返す cosh---------ハイパボリックコサイン値を返す ctime--------time関数で取得した暦時間を、現地時間(日本時間)の表示可能文字列に変換する difftime-----2つのtime_t型の引数の差を秒単位で計算する div----------2つの引数の商と余りを返す(div_t型) exit----------オープンされている全てのファイルを正常にクローズして、プログラムを終了する exp----------指数関数eの指定数乗を返す fabs---------double型指定数の絶対値を返す fclose-------指定ファイルポインタをクローズする feof---------指定ファイルポインタのEOFフラグをチェックする ferror-------指定ファイルポインタの読み書きエラーをチェックする fflush-------現在バッファに入っているすべての文字を指定ファイルポインタへ吐き出す fgetc--------指定ファイルポインタから1文字読み込む fgetpos------指定ファイルポインタのファイル位置指示子の値を指定の場所に入れる fgets--------指定ファイルポインタから指定文字数-1文字まで、または復改までの文字列を読み込む floor--------数値を切り下げる fmod---------引数1/引数2 の余りを計算する fopen--------指定のファイルを、指定のモードでオープンする fprintf------対応する引数の内容を、指定のファイポインタに出力する fputc--------指定文字を、指定のファイポインタに書込む fputs--------指定文字列を、指定のファイポインタに書込む fread--------指定のファイポインタから、指定個分のデータを読み込む free---------malloc,calloc,realloc,によって確保されたメモリ領域を開放する freopen------指定ファイルを指定モードにて指定ファイポインタに再割付する frexp--------指定浮動小数点を、小数部と指数部に分解する fscanf-------指定のファイポインタから、指定書式に従って対応する引数に読み込む fseek--------指定ファイポインタのファイルポジションを、指定の基点から指定バイト移動する ftell--------指定ファイポインタの現在のファイルポジションを返す fwrite-------指定個分のデータを、指定ファイポインタへ書込む getc---------指定ファイポインタから、1文字読み込む getchar------標準入力(stdin)から、1文字読み込む getenv-------指定環境変数の値を得る gets---------標準入力(stdin)から、文字列を読み込む gmtime-------暦時間を構造体型のグリニッジ標準時間(世界標準)に変換する isalnum------指定文字が英文字(A~Z、a~z)又は数字(0~9)なら真を返す isalpha------指定文字が英文字(A~Z、a~z)なら真を返す iscntrl------指定文字が制御文字(0x00~0x1F、0x7F)なら真を返す isdigit------指定文字が数字(0~9)なら真を返す isgraph------指定文字が空白を除く印字可能文字(0x21~0x7E)なら真を返す islower------指定文字が小文字(a~z)なら真を返す isprint------指定文字が印字可能文字(0x20~0x7E)なら真を返す ispunct------指定文字が区切り文字(空白、英文字、数字、以外の印字可能文字)なら真を返す isspace------指定文字が空白,タブ,復帰,改行,垂直タブ,フォームフィード(0x09~0x0D,0x20)なら真を返す isupper------指定文字が大文字(A~Z)なら真を返す isxdigit-----指定文字が16進文字(0~9、A~F、a~f)なら真を返す labs---------指定long型データの絶対値を返す ldexp--------(引数1)*2の(引数2)乗となる値を返す ldiv---------引数1÷引数2の、商と余りを返す localeconv---地域で使われる数字や貨幣通貨記号などの情報を構造体lconvに初期設定する localtime----time関数で取得した暦時間を現地時間(日本時間)に変更する log----------自然対数(eを底とする対数)を返す log10--------常用対数(10を底とする対数)を返す longjmp------setjmpが記述されている位置に大域ジャンプする malloc-------指定バイトのメモリ領域を指定個確保し、それへのポインタを返す(初期化なし) mblen--------マルチバイト文字で示す1文字の長さを取得し、また正当性を調べる mbstowcs-----マルチバイト文字列を、対応するワイド文字列に変換する mbtowc-------指定個の指定マルチバイト文字を、対応するワイド文字に変換する memchr-------指定バッファの先頭から文字をサーチし、指定文字のある位置を返す memcmp-------指定バッファの2つを、指定バイト分辞書順に比較する memcpy-------引数2の最初から指定バイト分、引数1にコピーする(引数1=引数2:動作不定) memmove------引数2の最初から指定バイト分、引数1にコピーする(引数1=引数2:OK) memset-------引数2を指定バイト分、引数1にセットする mktime-------指定の構造体tm型データを暦時間に変換する modf---------指定の浮動小数点値を、整数部と小数部に分ける perror-------stderrに指定エラーメッセージを付加して出力する pow----------(引数1)の(引数2)乗を返す printf-------対応する引数の内容を、指定書式に従って標準出力(stdout)に出力する putc---------指定文字を、指定ファイルポインタに出力する putchar------指定文字を、標準出力(stdout)に出力する puts---------指定文字列を、標準出力(stdout)に出力する qsort--------クイックソートを行う raise--------実行しているプログラムに、指定したシグナルを送る rand---------0~RAND_MAXまでの整数の擬似乱数を返す realloc------すでにメモリ確保されたブロックのサイズを、指定サイズに変更して再割当てする remove-------指定ファイルを削除する rename-------ファイル名を変更する rewind-------指定ファイルポインタのファイル位置指示子を先頭にし、エラー指示子をクリアする scanf--------標準入力(stdin)から指定書式に従って対応する引数にデータを読み込む setbuf-------指定ファイルポインタの入出力バッファを再割当てする setjmp-------現在の環境情報を設定し、longjmpに備える setlocale----ロケール(地域性)を設定する setvbuf------指定ファイルポインタの入出力バッファを指定モードに従い再割当てする signal-------シグナル(割り込み)検出時の処理を指定する sin----------サイン値を返す sinh---------ハイパボリックサイン値を返す sprintf------対応する引数の内容を、指定書式に従って文字配列に出力する sqrt---------平方根値を返す srand--------擬似乱数の発生系列を変更する sscanf-------指定文字列から、指定書式に従って対応する引数にデータを読み込む strcat-------文字配列の後ろに、文字列を連結する strchr-------指定文字列の先頭から、指定文字を探しその位置を返す strcoll------文字列と文字列を、setlocaleで設定した地域仕様の情報で比較する strcmp-------文字列と文字列を、辞書順に比較する strcpy-------配列に文字列をコピーする strcspn------指定文字列1のうち、指定文字列2に含まれるどれかの文字が最初に現れるまでの文字数を返す strerror-----処理系定義のエラーメッセージへのポインタを返す strftime-----時刻と日付を地域の表示形式にする strlen-------指定文字列の長さを返す。終端文字 \0 は数えない strncat------文字配列の後ろに、文字列の先頭から指定文字数分を連結する strncmp------文字列と文字列の先頭から指定文字数分を、辞書順に比較する strncpy------配列に文字列の先頭から指定文字数分をコピーする strpbrk------指定文字列1の中で、指定文字列2に含まれる文字が現れる位置を返す strrchr------指定文字列の後ろから、指定文字を探しその位置を返す strspn-------指定文字列1のうち、指定文字列2に含まれないどれかの文字が最初に現れるまでの文字数を返す strstr-------指定文字列の先頭から、指定文字列を探しその位置を返す strtod-------指定文字列をdouble型の値へ変換する strtok-------指定文字列2の中の各文字を分離記号として、指定文字列1の中からトークンを切り出す strtol-------指定文字列をlong型の値へ変換する strtoul------指定文字列をunsigned long型の値へ変換する strxfrm------指定文字列を地域仕様に基づいて、先頭から指定バイト変換する system-------コマンドプロセッサを呼び出し、指定したコマンドを実行する tan----------タンジェント値を返す tanh---------ハイパボリックタンジェント値を返す time---------現在の暦時間を、指定time_t型変数に入れる tmpfile------一時的にデータを置く為のファイルを作る tmpnam-------一時的にデータを置く為のファイルを作り、その名前を取得する tolower------指定文字が大文字ならば、小文字に変換する toupper------指定文字が小文字ならば、大文字に変換する ungetc-------指定ファイルポインタに文字を戻す vfprintf-----指定va_list型の変数を可変個の引数リストとして、fprintfを行う vprintf------指定va_list型の変数を可変個の引数リストとして、printfを行う vsprintf-----指定va_list型の変数を可変個の引数リストとして、sprintfを行う wcstombs-----指定ワイド文字列を対応するマルチバイト文字列に変換する wctomb-------指定ワイド文字を対応するマルチバイト文字に変換する □■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■