テキスト ファイルのフィールドを定義する方法

「テキスト ファイルのデータを ArcGIS で読み込もうとしたけれど、希望どおりのデータ型にならなかった」などの経験をされたことはありませんか?
そこで、今回はフィールドのデータ型などを定義できる「schema.ini」ファイルをご紹介します。

ArcGIS は、Open Database Communication(ODBC)ドライバー用の Microsoft OLE DB プロバイダー、Microsoft ODBC Text Driver を使用して、テキスト ファイル内のデータにアクセスします。このドライバーは、「schema.ini」という名前のファイルにテキスト ファイルに関するスキーマ情報を格納します。

ArcCatalog または ArcMap でテキスト ファイルが格納されているディレクトリを閲覧したり開いたりすると、自動的にそのディレクトリに「schema.ini」が作成されます。

この「schema.ini」ファイルに各フィールドのデータ型やフィールド長などを定義することができます。

・テキスト ファイルの名前
・ファイルのフォーマット
・フィールドの名前、長さ、データ型
・文字セット
・データ型の変換

ただし、「schema.ini」で設定した情報すべてが ArcGIS でご利用いただけるわけではありません。

■テキスト ファイルの名前
「schema.ini」の最初に記述されるのが角括弧で囲まれたテキスト ファイルの名前です。

———————
[SampleData.txt]
———————

■ファイルのフォーマット
テキスト ファイルのフォーマットを指定します。

ArcGIS では、ファイルの拡張子をみて、各テキスト ファイルの区切り文字を決定しています。拡張子が「.txt」「.asc」「.csv」のファイルは、カンマ区切りのファイルとして認識され、拡張子が「.tab」ファイルは、タブ区切りのファイルとして認識されます。ですから、たとえば拡張子が「.txt」のファイルがあり、そのファイル内でカンマ以外の区切り文字(たとえば “;”)が使用されている場合、デフォルトではファイルが正しく解釈されません。
そのような場合には下記のように記述します。

Format=Delimited(;)

フォーマットの種類:
TabDelimited               - タブ区切り
CSVDelimited               - カンマ区切り
Delimited(custom character)   - ダブルクォーテーション( ” )を除く任意の一文字
FixedLength                - 固定長

■フィールドの名前、長さ、型
フィールド名を指定する方法は 2 通りあります。

1.テキスト ファイルの 1 行目をフィールドの名前に指定します。
また、フィールドのデータ型を決定するためにフィールドの先頭から何レコード目までに格納されているレコードを検査するかを MaxScanRows オプションで指定することができます。下記の例のように 0 を指定するとファイル内のすべてのレコードを検査します。
(デフォルトでは 25 レコード目までを検査します。)

———————
ColNameHeader=True
MaxScanRows=0
———————

2.各フィールドのフィールド名、データ型、フィールド長を指定します。
固定長のファイルには必ず各フィールドの名前、データ型、長さを指定する必要があります。固定長以外のファイルでもフィールドの名前や型などを指定することはできますが、Char 型以外のフィールド長はデータ型に依存します。

Coln=ColumnName type [Width #]

ColumnName - フィールド名にスペースが含まれている場合は、ダブルクォーテーションで囲む必要があります。
type - データ タイプには次のようなものがあります。
ArcGIS でサポートされていないデータ型はご利用になれません。
()内は ArcGIS で読み込んだ場合のデータ型です。

Microsoft Jet のデータ型:
Byte (Short Integer)
Short (Short Integer)
Long (Long Integer)
Single (Float)
Double (Double)
DateTime (Date)
Text
Memo (Blob)

ODBC のデータ型:
Char (Text)
Float (Double)
Integer (Long Integer)
LongChar (Blob)
Date

————————-
Col1=NAME Char Width 30
Col2=XCOORD Float
Col3=YCOORD Float
————————–

■文字セット
文字セットには、ANSI または OEM のどちらかを選択できます。
Shift-JIS をお使いの場合のコードページ番号は 932 になります。

—————————–
CharacterSet=OEM
—————————–

■データ型の変換(ArcGIS でエクスポートする際に事前に「schema.ini」で設定しますが、ArcGIS でサポートされていないデータ型は利用できません。)
データを下記の書式で表示することができます。

DateTimeFormat   - 日付と時刻の書式を設定します(エクスポートのみ有効)
DecimalSymbol    - 数値の整数部分と端数部分を分けるための 1 文字を設定します。
NumberDigits        - 数値の小数点以下の桁数を指定します(エクスポートのみ有効)
NumberLeadingZeros - -1 より大きく、1 より小さい 10 進値の前に 0 を付けるかどうかを指定します。
値は False(0 を付けない)または True です。
※ArcGIS では利用できません。

※Currency の書式は ArcGIS ではサポートされていないデータ型なのでご利用になれません。

CurrencySymbol          - テキスト ファイルの通貨の値に使われる通貨記号を指定します。例: $
CurrencyPostFormat          - 通貨記号と値の表示方法を指定します。
CurrencyDigits                   - 通貨値の小数点以下の桁数を指定します。
CurrencyNegFormat          - マイナスの通貨値の表示方法を指定します。
CurrencyThousandSymbol - 通貨値を3桁の値で区切るために使われる1文字のシンボルを指定します。
CurrencyDecimalSymbol    - 通貨値の整数部分と端数部分を分けるための 1 文字を設定します。

※これまでにご紹介した「schema.ini」ファイルの項目を指定しない場合は、Windows コントロール パネルの既定値が使われます。

※「schema.ini」ファイルでの設定は Windows レジストリの設定をファイルベースで無効にします。

■サンプル
————————————–
◇「schema.ini」のサンプル
————————————–
[交通事故.txt]
ColNameHeader=False
CharacterSet=932
Format=CSVDelimited
Col1=道路ID Integer
Col2=負傷者数 Integer
Col3=死者数 Integer
Col4=飲酒運転 Char Width 16
Col5=速度 Char Width 9
Col6=事故地点 Integer

—————————————
◇カンマ区切りのテキスト ファイルのサンプル (交通事故.txt)
—————————————
123,2,0,該当,30-60km,18053
124,2,1,,0-30km,18053
125,1,0,,0-30km,18053
126,0,0,,60km以上,18053
127,2,0,,30-60km,18085
—————————————

上記の「schema.ini」とともに「交通事故.txt」を ArcGIS で読み込むと、「schem
a.ini」で指定したフィールド名やデータ型で下記のように表示されます。

—————————————
道路ID          Long Integer
負傷者数        Long Integer
死傷者数        Long Integer
飲酒運転        Text
速度              Text
事故地点        Long Integer
—————————————

フォローする