ASから取得した文字列には右側に空白が…
AS400からデータを取得すると文字列に空白がついてきて困ることがあります。これはAS400内部では固定長でデータが管理されているからですが、PCにデータを取得すると文字列は左寄せで右側に空白がついてきます。文字型の場合、たった1文字でもたとえば100文字分確保されていればその分の空白がついてきます。
この右側の空白を取り除くにはどうすればよいのでしょうか。
多くのプログラミング言語にはtrimという関数がありますが…。R にも標準で trimws() 関数( R: Remove Leading/Trailing Whitespace )があります。Trim white space の省略のようです。
さっそく使ってみると…
StudentName # ASから取得した文字列 "山田 太郎 " trimws(StudentName) "山田 太郎 "
trimws() をかけても変わっていません。右側の全角空白が残っています。うーむ。
trimws() 使用例
trimws() の使い方を調べてみます。
半角空白を含む文字列 | 全角空白を含む文字列 |
strH<-c(" あ い ") # 両側の半角空白削除 trimws(strH) [1] "あ い" # 左側の半角空白削除 trimws(strH, "l") [1] "あ い " # 右側の半角空白削除 trimws(strH, "r") [1] " あ い" |
strZ<-c(" あ い ") trimws(strZ) [1] " あ い " trimws(strZ, "l") [1] " あ い " trimws(strZ, "r") [1] " あ い " |
両側/左/右の半角空白削除成功 | 全角空白は削除できず |
trimws() 使用上の注意
- trimws() は文字列の中にはさまっている空白は除去できません。
- trimws() 単体では半角空白には対応していますが、全角空白には対応していないことに注意が必要です。VBAなどは半角全角問わず空白を除去できますので注意が必要です。
- trimws() でいう空白とは半角空白、\t、\r、\n のことです。R: Remove Leading/Trailing Whitespace
このあたりはVB.NETなどと挙動が似ていますね。
\t \r \n trimws("\tTAB\t")
[1] "TAB"trimws("\rLF\r")
[1] "LF"trimws("\nRET\n")
[1] "RET"
str_trim()関数
ライブラリ stringr に含まれている str_trim() 関数も指定方法、挙動が全く同じように思われます。結局どうしましょうか
考えられるのは・全角空白を半角2個に置き換えてから trimws()
・全角対応の関数を作成する。
なんですが。