6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

nim文字列操作(unicode)

Posted at

概要

nimのUnicode操作をコツコツと。
nimでも日本語リテラルは通りますが、日本語文字列の操作をstring型で利用しようとすると
期待通りに動きません。
そこでunicodeモジュールを使って、ルーン(Rune)型として利用するようです。

以下メモ

うまくいかない例

import unicode,strutils
block:
  var str = "あいうえお"
  #echo "表示されない=>",str[0]
  echo "表示される  =>",str[0..2]
  echo "文字列長    =>",str.len
(stdout)
表示される  =>あ
文字列長    =>15

Rune型を利用

import unicode,strutils
block:
  var str = "あいうえお".toRunes
  echo $str
  echo "表示される  =>",str[0]
  echo "表示される  =>",str[0..2]
  echo "文字列長    =>",str.len
(stdout)
あいうえお
表示される  =>あ
表示される  =>あいう
文字列長    =>5

stringクラス拡張

import unicode,strutils
block:
  var str = "あいうえお"
  echo "文字列長=>",str.runeLen
  echo "バイトインデクス=>",str.runeAt(0)
  echo "バイトインデクス=>",str.runeAt(3)
  echo "バイトインデクス=>",str.runeAt(6)
  echo "バイトインデクス=>",str.runeAt(9)
  echo "バイトインデクス=>",str.runeAt(12)
  echo "インデクス=>",str.runeAtPos(0)
  echo "インデクス=>",str.runeAtPos(1)
  echo "インデクス=>",str.runeAtPos(2)
  echo "インデクス=>",str.runeAtPos(3)
  echo "インデクス=>",str.runeAtPos(4)
(stdout)
バイトインデクス=>あ
バイトインデクス=>い
バイトインデクス=>う
バイトインデクス=>え
バイトインデクス=>お
インデクス=>あ
インデクス=>い
インデクス=>う
インデクス=>え
インデクス=>お
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?