文字列から文字を1つずつ取り出す方法 - AWK
AWKの文字列は、C言語とは異なり、配列の形で直接取り出す事は出来ません。その代わり、処理系によっては、バイトを意識せずに文字を取り出す事が出来ます。
o 文字を1つずつ取り出す方法 -- substr関数を使います。
o 配列に入れてしまう方法 -- split関数を使います。
**** 手順
** 方法1. 文字を1つずつ取り出す方法
o substr関数を使います。
--------
BEGIN {
v = "ミクさん";
print "文字列「" v "」の文字分け結果";
for (i = 1; i <= length(v); ++i) {
print i " : " substr(v, i, 1); # 文字を1つずつ取り出します。
}
}
--------
o 実行結果
--------
文字列「ミクさん」の文字分け結果
1 : ミ
2 : ク
3 : さ
4 : ん
--------
o Gawk以外で漢字などの全角文字を扱う時は、1バイトずつ取り出しますので、注意が必要です。
o 性能を気にするような使い方をする場合、length(v)の計算を for文の外に出すと、少し速くなりそうです。
** 方法2。配列に入れてしまう方法
o split関数を使います。
--------
BEGIN {
v = "ミクさん";
print "文字列「" v "」の文字分け結果";
n = split(v, a, ""); # 区切り文字に、空文字を指定するのが、ポイントです。
for (i = 1; i <= n; ++i) {
print i " : " a[i];
}
}
--------
o 実行結果
--------
文字列「ミクさん」の文字分け結果
1 : ミ
2 : ク
3 : さ
4 : ん
--------
o 「Gawkとmawk32」以外で漢字などの全角文字を扱う時は、1バイトずつ取り出しますので、注意が必要です。
==
関連ページ:
▼AWKの文字列操作関数と関連機能(▼ABC順)
▼AWKプログラムを書く(▼ABC順)
▼AWK
▼制作メモ
> 文字列中で使用出来る特殊文字
ツール。文字列からアスキーコードを調べます(String to ASCII)
length = 文字列や配列の長さを調べる
+
substr = 文字列の一部を取り出す
split = 文字列を分割する
文字列を組み立てる