FAQ
フィールド演算で半角文字列を全角文字列に置換する

ナレッジ番号:2678 | 登録日:2023/05/29 | 更新日:2023/06/21

概要

ArcMap の「フィールド演算」はフィーチャの属性値を入力するための便利な機能です。複数のフィーチャに一括で属性値の入力ができ、スクリプトを使用した高度な演算も行うことができます。ここでは、フィールド演算で半角の文字列を全角の文字列へ置換する方法をご紹介します。

操作手順

準備

属性テーブルに新規にフィールドを追加します。フィールドのタイプは、「TEXT 型」にしてください。フィールドに作成方法につきましは、以下の FAQ をご参考ください。

新規でフィールドを作成するには?

手順

  1. 作成したフィールドの名前上で右クリックし、[フィールド演算] を選択します。
  2. [フィールド演算] ダイアログの [形式] から [Python] を選択します。
  3. [フィールド演算] ダイアログの [コードブロックを表示] にチェックを入れます。
  4. [Pre-Logic Script Code] のボックスに以下の Python スクリプトを入力します。
    """ han2zen_all(field)
         半角から全角へ変換(英数字、カタカナ)
         ○使い方
         引数1(field) : 参照するフィールド
         
         Copyright (C) 2002-2012 Esri Japan Corporation. All rights reserved. """
    
    han2zen = {'A':u'A' , 'B':u'B' , 'C':u'C' , 'D':u'D' , 'E':u'E' ,
                  'F':u'F' , 'G':u'G' , 'H':u'H' , 'I':u'I' , 'J':u'J' ,
                  'K':u'K' , 'L':u'L' , 'M':u'M' , 'N':u'N' , 'O':u'O' ,
                  'P':u'P' , 'Q':u'Q' , 'R':u'R' , 'S':u'S' , 'T':u'T' ,
                  'U':u'U' , 'V':u'V' , 'W':u'W' , 'X':u'X' , 'Y':u'Y' ,
                  'Z':u'Z' , '!':u'!' , '\"':u'”' , '#':u'#' , '$':u'$' ,
                  '%':u'%' , '&':u'&' , '\'':u'’' , '(':u'(' , ')':u')' ,
                  '-':u'ー' , '-':u'-' , '=':u'=' , '~':u'^' , '~':u'~' , '\\':u'¥' ,
                  '@':u'@' , '`':u'‘' , '[':u'[' , '{':u'{' , ';':u';' , '+':u'+' ,
                  ':':u':' , '*':u'*' , ']':u']' , '}':u'}' , ',':u',' , ',':u'、' , '<':u'<' ,
                  '.':u'.' , '>':u'>' , '/':u'/' , '?':u'?' , '\\':u'\' , '_':u'_' ,
                  'a':u'a' , 'b':u'b' , 'c':u'c' , 'd':u'd' , 'e':u'e' ,
                  'f':u'f' , 'g':u'g' , 'h':u'h' , 'i':u'i' , 'j':u'j' ,
                  'k':u'k' , 'l':u'l' , 'm':u'm' , 'n':u'n' , 'o':u'o' ,
                  'p':u'p' , 'q':u'q' , 'r':u'r' , 's':u's' , 't':u't' ,
                  'u':u'u' , 'v':u'v' , 'w':u'w' , 'x':u'x' , 'y':u'y' ,
                  'z':u'z' , 
                  '0':u'0' , '1':u'1' , '2':u'2' , '3':u'3' , '4':u'4' ,
                  '5':u'5' , '6':u'6' , '7':u'7' , '8':u'8' , '9':u'9' ,
                  u'ア':u'ア' , u'イ':u'イ' , u'ウ':u'ウ' , u'エ':u'エ' , u'オ':u'オ' ,
                  u'カ':u'カ' , u'キ':u'キ' , u'ク':u'ク' , u'ケ':u'ケ' , u'コ':u'コ' ,
                  u'サ':u'サ' , u'シ':u'シ' , u'ス':u'ス' , u'セ':u'セ' , u'ソ':u'ソ' ,
                  u'タ':u'タ' , u'チ':u'チ' , u'ツ':u'ツ' , u'テ':u'テ' , u'ト':u'ト' ,
                  u'ナ':u'ナ' , u'ニ':u'ニ' , u'ヌ':u'ヌ' , u'ネ':u'ネ' , u'ノ':u'ノ' ,
                  u'ハ':u'ハ' , u'ヒ':u'ヒ' , u'フ':u'フ' , u'ヘ':u'ヘ' , u'ホ':u'ホ' ,
                  u'マ':u'マ' , u'ミ':u'ミ' , u'ム':u'ム' , u'メ':u'メ' , u'モ':u'モ' ,
                  u'ヤ':u'ヤ' , u'ユ':u'ユ' , u'ヨ':u'ヨ' , u'゙':u'゛' , u'゚':u'゜' ,
                  u'ラ':u'ラ' , u'リ':u'リ' , u'ル':u'ル' , u'レ':u'レ' , u'ロ':u'ロ' ,
                  u'ワ':u'ワ' , u'ヲ':u'ヲ' , u'ン':u'ン' , u'「':u'「' , u'」':u'」' , u'。':u'。' ,
                  u'、':u'、' , u'・' :u'・', u'ァ':u'ァ' , u'ィ':u'ィ' , u'ゥ':u'ゥ' ,
                  u'ェ':u'ェ' , u'ォ':u'ォ' , u'ャ':u'ャ' , u'ュ':u'ュ' , u'ョ':u'ョ' ,
                  u'ガ':u'ガ' , u'ギ':u'ギ' , u'グ':u'グ' , u'ゲ':u'ゲ' , u'ゴ':u'ゴ' ,
                  u'ザ':u'ザ' , u'ジ':u'ジ' , u'ズ':u'ズ' , u'ゼ':u'ゼ' , u'ゾ':u'ゾ' ,
                  u'ダ':u'ダ' , u'ヂ':u'ヂ' , u'ヅ':u'ヅ' , u'デ':u'デ' , u'ド':u'ド' ,
                  u'バ':u'バ' , u'ビ':u'ビ' , u'ブ':u'ブ' , u'ベ':u'ベ' , u'ボ':u'ボ' ,
                  u'パ':u'パ' , u'ピ':u'ピ' , u'プ':u'プ' , u'ペ':u'ペ' , u'ポ':u'ポ' ,
                  u'ヴ':u'ヴ' }
                    
    def han2zen_all(field):
      new_field=field
      if isinstance(field, str):
        new_field = field.decode("utf-8")
      for j,k in han2zen.iteritems():
        if j in new_field:
          new_field = new_field.replace(j,k)
      return new_field
    
  5. 下部にある「フィールド名 = 」の箇所に、以下のコードを入力します。
    han2zen_all(!半角!)
    
    「半角」の部分を、半角文字列が入っているフィールドの名前に変更してください。
  6. [OK] をクリックし、フィールド演算を実行します。

注意:

  • Python スクリプトでは、行のインデント(行頭のスペースの数)が意味を持ちます。注意して入力してください。
  • [フィールド演算] ダイアログにコピー&ペーストで入力する場合は、フィールドの値として入力する式の後に改行を入力しないようにご注意ください。

補足

unicodedata モジュールをインポートして、normalize メソッドを実行することでも同様の操作ができます。

import unicodedata
def ConvStr(valStr):
    return unicodedata.normalize('NFKC', valStr)
ConvStr( !半角! )

関連情報

フィールド演算の式を別のマップ ドキュメントで再利用する方法

メタデータ

種類

製品

バージョン