---
title: "複数の入力ファイルを、単一のデータマッピング処理でまとめて処理する"
date: "2013-01-29"
categories: 
  - "applications"
  - "data-integration"
tags: 
  - "data-mapping"
  - "mapforce"
description: Altova MapForceを使って、複数の入力ファイルを効率的に処理し、データマッピングを行う方法を学びましょう。このガイドでは、ワイルドカード、ファイルパス関数、およびフィルタリング技術について解説します。
---
Status: #blog

Tags:  #data-mapping #mapforce

Categories: [ETL](/blog/ja/category/etl.md) | [data-integration](/blog/ja/category/data-integration.md)
# 複数の入力ファイルを、単一のデータマッピング処理でまとめて処理する

一般的なデータ変換作業では、多くの場合、バッチ処理として大量の入力ファイルが到着します。[Altova MapForce](https://www.altova.com/ja/mapforce.html)には、最小限の操作でファイル群を処理できる機能が備わっています。例えば、最近、GPS機能を搭載したデジタルカメラのメモリカードから一連のファイルをコピーしました。それぞれの.LOGファイルは、CSV形式で、特定のルートのGPS座標が記録されています。

![データ変換に使用するソースファイルのディレクトリ一覧](https://lh4.ggpht.com/-Y_WZhryIjkY/UPl5wriQH7I/AAAAAAAAA9Q/EsluCIUq068/clip_image001%25255B3%25255D.png?imgmax=800 "Directory list of source files for data conversion")

我々は、CSV形式のデータをXMLベースの.gpx形式に変換するための処理を迅速に設計し、3つのファイルをまとめて処理することで、1回の実行で3つの出力ファイルを作成しました

![自動生成された出力ファイルの一覧](https://lh3.ggpht.com/-_QzOFmBto78/UPl5xBjlsjI/AAAAAAAAA9Y/DIJBSZ6AdMw/clip_image002%25255B3%25255D.png?imgmax=800 "List of automatically generated output files")

<!--more-->

まず、マッピングの入力コンポーネントのプロパティダイアログで、入力ファイル名にワイルドカード文字を使用しました。これにより、MapForceは、作業ディレクトリ内のワイルドカードに一致するすべてのファイルを個別に処理するように指示されます。

![マッピング入力ファイルにワイルドカードを使用する](https://lh3.ggpht.com/-iqz0XDhHvLQ/UPl5xo-viaI/AAAAAAAAA9g/TO9klug7KLc/clip_image003%25255B3%25255D.png?imgmax=800 "Using a wildcard for the mapping input file")

複雑な変換を行う場合、または入力ファイルが非常に大きい場合は、まず一意のファイル名を使用してマッピングを開発し、マッピングの結果に満足したら、ワイルドカードを使用するように変更することができます。

**ファイルパス関連の関数**

組み込みのMapForce関数ライブラリには、出力ファイル名を管理するために使用できるファイルパス関連の関数が含まれています。単一の出力ファイルを定義した場合、入力データを処理するたびに、新しいデータがそのファイルに追記されます。

![MapForce関数ライブラリにおけるファイルパス関連の関数](https://lh5.ggpht.com/-JxIKHZXrzEo/UPl5xzHgSnI/AAAAAAAAA9o/6APxltAkffU/clip_image004%25255B3%25255D.png?imgmax=800 "File path functions in the MapForce function library")

ファイルパス関数を他の文字列関数と組み合わせることで、出力ファイル名と保存場所を完全に制御できます。今回は、出力ファイルを入力ファイルと同じディレクトリに保存し、より分かりやすいファイル名を使用し、ファイル拡張子として".gpx"を使用することにしました。

以下に示すマッピング処理では、文字列連結関数とファイルパス関数を組み合わせて、1211190.LOGなどのファイルを処理し、出力ファイル1211190converted.gpxを生成しています。

![パス関数と文字列関数を組み合わせて使用する](https://lh4.ggpht.com/-l6ypssdA9Mg/UPl5ydkZBjI/AAAAAAAAA9w/2IfnpeT0TDY/clip_image005%25255B3%25255D.png?imgmax=800 "Using path functions with a string function")

ファイルパス関数を使用して文字列を生成し、それを出力として挿入することも可能です。GPXファイルのXMLスキーマには、メタデータの説明要素が含まれています。私たちは、出力ファイルと元のデータを明確に紐付けるために、入力ファイル名をメタデータに挿入することにしました。この方法により、出力ファイル自体がドキュメントとして機能し、予期せぬ出力が発生した場合、元のデータに遡って原因を特定するのに役立ちます。

以下に示すマッピングの箇所では、ソースファイル名を文字列に挿入し、その文字列をメタデータに紐付けます `<desc>` 要素：

![ファイル名を出力データとしてマッピングする](https://lh4.ggpht.com/-_NjzoK77594/UPl5zLiSFyI/AAAAAAAAA94/3E_Qvk6srt8/clip_image006%25255B3%25255D.png?imgmax=800 "Mapping the file name as output data")

結果として得られた情報は、[マッピング出力プレビュー](https://www.altova.com/ja/mapforce/mapping-output.html)の4行目に表示されます

**(画像の説明: ファイル名とともに表示される出力データのプレビュー)**

**入力データのフィルタリング**

このデータマッピングの中核となるのは、入力ファイルに対するフィルタ処理です。カメラのGPSログファイルは、National Marine Electronics Association (NMEA) の仕様に基づいて記録されています。以下に、入力ファイルの抜粋を示します

![カメラのGPSログから抽出されたサンプルデータ](https://lh6.ggpht.com/-My1iWbnP1Fs/UPl5z4xF7tI/AAAAAAAAA-I/dmH9bWwphCI/clip_image008%25255B3%25255D.png?imgmax=800 "Sample data from the camera GPS log")

最初のデータ行の後、記録された各地点は、2つのNMEA形式の文で記述されます。それぞれの文の最初のフィールドには、その文の種類が記載されています。GGA文には、時刻、緯度、経度、標高、および位置情報の品質に関する追加データが含まれています。RMC文には、時刻、緯度、経度、および日付が含まれています。

RMC形式の文には、.gpxファイルを作成するために必要な最小限のデータが含まれています `<trkpt>` 要素として、入力データの中から特定の条件に合致する行のみを選択するために、フィルタを使用することができます。以下にその例を示します

![入力データをフィルタリングして、特定の行を抽出します](https://lh5.ggpht.com/-u3MGw07n5Jg/UPl50MRDs2I/AAAAAAAAA-M/Jdm8sOiyLko/clip_image009%25255B3%25255D.png?imgmax=800 "Filtering the input data to extract rows")

行の最初のフィールドに表示されるメッセージタイプが"$GPRMC"を含んでいる場合、その行は処理のためにそのまま渡されます。そうでない場合、その行は無視されます。

入力ファイルに含まれる実際のデータも、いくつかの処理が必要でした。各緯度と経度について、元のデータに含まれる度、分、秒を定義する複数の項目を組み合わせて、それを10進度の形式に変換する必要がありました。また、時刻と日付の項目を組み合わせて、.gpx形式で要求されるISO 8601形式で記録する必要がありました。例えば、2012-11-19T20:43:23Zのような形式です。これらの変換処理を、複雑さを隠蔽し、メインの地図表示処理とは分離するために、ユーザー関数として定義しました。

このマッピングは、以前の投稿で定義した `getElevationUS` ユーザー関数を再利用する機会も提供します [予期せぬ事態にも対応 - Altova MissionKitが、数値フォーマットに関する謎を解決します](https://www.altova.com/blog/2013/01/expect-unexpected-altova-missionkit.html). 今回、標高データを小数点以下3桁まで丸めており、これは最も近いミリメートルを表しています。

CamerlogToGPXデータのマッピング処理において、ユーザーが定義した関数を使用する主要な部分は、以下のようになります

![ユーザー関数を用いたデータマッピングの中核部分](https://lh6.ggpht.com/-2HVaK82dfyo/UPl50fC_aHI/AAAAAAAAA-Y/1rMavSy31hM/clip_image010%25255B3%25255D.png?imgmax=800 "Core of the data mapping with user functions")

以下に、出力ファイルの例を示します。このファイルには、`<trk>`、`<trkseg>`、および複数の`<trkpt>`という要素が含まれています。

![サンプル出力データ](https://lh6.ggpht.com/-HQudomQ_V9o/UPl51JbUgXI/AAAAAAAAA-g/OH2DiYSvrZU/clip_image011%25255B3%25255D.png?imgmax=800 "Sample output data")

MapForceの出力メニューには、出力ファイルを.gpx XMLスキーマに対して検証するためのオプションが用意されています

![検証結果](https://lh6.ggpht.com/-9PvYWtWIYh0/UPl51dQrWfI/AAAAAAAAA-o/1NI8SHJzfLg/clip_image012%25255B3%25255D.png?imgmax=800 "Validation results")

**もしご希望でしたら、ご利用いただけます** [**Altova MapForce**](https://www.altova.com/ja/download-trial.html) **独自のデータマッピングに合わせて、入力ファイルをまとめて処理することができます** [**こちらをクリックして、無料トライアル版をダウンロードしてください。**](https://www.altova.com/ja/download-trial.html)**.**
