日本語

問題: フィールド演算が完了したのに値が変更されない

説明

フィールド演算は、個別の計算に時間を取られることなく、すべてのフィールド値を一度に修正するために使用できる非常に優れたツールです。 しかし、フィールド演算を使用するには、フィールド タイプ、フィールド長、ドメインなどの詳細内容を入念に確認する必要があります。 場合によっては、フィールド演算がエラーなく実行されたのに、フィールド値が変更されていない状況を目にすることがあります。

原因

フィールド演算を使用する場合の注意点は、ユーザーが使用するフィールドのタイプを認識しておく必要があることです。

たとえば、2 つの列のテーブルがあり、この 2 列が一致した場合のみ 3 列目にテキストを配置したい場合は、次のようになります。
Image showing the input table with three fields.

[フィールド演算] で比較コードを使用します。

Image showing code in Field Calculator where, within the code block, the statement "if Field1==Field2:".
[ジオプロセシング] メニューの [結果] では、この操作が実行され成功したよう見えますが、3 列目は変更されていません。
Results window showing that Field Calculator completed successfully.
これは、場合によっては同じに見えるものの (FieldName1 が 1 で FieldName2 も 1)、実際には 2 つの入力フィールドのタイプが異なっていることが原因です。
Screenshot of FieldName1 properties showing Type: StringScreenshot of FieldName2 properties showing Type: Short
つまり、string の 1 は short integer の 1 と同じではなく、コード ブロック内に if ステートメントの行先として else ステートメントが存在しないために、フィールドへの入力が何も返されないのです。

解決策または対処法

フィールド演算への入力時には、常にフィールド タイプをチェックしてください。 str()、int() などのコードを使用してフィールド タイプを一時的に修正し、正常なフィールド演算が行われるように入力を同一タイプに変換することができます。 この例では、else ステートメントを追加できます。
Image showing the added line "else: return "The values are different""
これにより if ステートメントが false の場合に出力が入力されます。この出力では、さらに詳細な調査が必要で、具体的に if ステートメントが false である原因を調査し、値とそのタイプを調査するように示すこともできます。
Image showing the third column now is populated with "The values are different"

関連情報