システム間のデータ連携でよく利用されるテキストファイルには可変長ファイルと固定長ファイルがあります。この記事ではそれぞれどのような違いか整理しています。
フラットファイル(Flat File)とは
そもそも「可変長」や「固定長」を整理する前にそれらを総称する「フラットファイル」という言葉の定義を整理しておきたい。
フラットファイルとは「テキスト形式でデータが格納されたファイル」を指します。
よく使用されるCSVファイル(各項目間をComma「,」で区切ったファイル形式)などが代表的な例です。

比較的シンプルな構造であり、ファイルなので編集も容易、様々なシステムで互換性があることも多くシステム間のデータ連携で使用されるケースが多いです。
可変長ファイルとは
その名の通り、データの長さが可変な(決まっていない)ファイルのことです。現在、一般的に普及しているファイル形式です。
各行の長さが決まっていないため、データ長を気にせず値を格納することができます。
例えば、以下の3行のテキストはCSVファイルを表現しています。区切り文字や囲い文字を含めて1行目は「29桁」、2行目は「23桁」、3行目は「11桁」と各行で合計桁数がバラバラです。
"sample1","sample2","sample3"
"test1","test2","test3"
"a","b","c"このように各行でデータの長さが決まっていないファイルを可変長ファイルと呼びます。
ちなみに上記の様式(フォーマット)のことを可変長フォーマット、データ長が決まっていない行を可変長レコード、データ長が決まっていないデータを総称して可変長データと呼んでいることもあります。
厳密に言葉が定義されているわけではないので「可変長」と聞けば、データの長さが変えられるんだなぁくらいで覚えておくと良いかもしれません。
固定長ファイルとは
こちらもその名の通りですが、データの長さが固定な(決まっている)ファイルのことです。
長さが決まっているので何桁目から何桁目までの値がどのデータなのかを判別でき、プログラムの処理が容易で高速化させやすいメリットがあります。逆に固定であるが故に拡張性が低く、データの増減が必要な場合は周辺システムの大改修という可能性もあります。現在に比べコンピュータの性能が低かった時代に広く普及していたようです。
以下に各レコードの最大長が42桁の固定長ファイルの例を示します。
001tanaka tarou 20000101M1234567890
002satou hanako 19990214F9876543210
003ueda zirou 19841230M1122334455- ユーザーID:1~3桁目
- 姓:4~13桁目
- 名:14~23桁目
- 生年月日:24~31桁目
- 性別:32桁目
- 電話番号:33~42桁目
このように各データごとの最大長が決まっている形式が特徴です。
ちなみに「姓」と「名」の項目に一部空白が含まれています。これは利用するシステムで名前の長さが人によって違うことを考慮し、それぞれ桁数を10桁分用意していることに合わせています。4~13桁目と14~23桁目をシステムが名前として処理するために10桁に満たない余剰分は半角の空白で埋める処理(パディング)を施しています。空白以外にも0などで埋めることもあります。
また、下記のように改行がないパターンも存在し、上記同様桁数ごとに識別します。人が判別するには見づらいですね…
001tanaka tarou 20000101M1234567890002satou hanako 19990214F9876543210003ueda zirou 19841230M1122334455こちらも可変長同様、上記の様式(フォーマット)のことを固定長フォーマット、データ長が決まっていない行を固定長レコード、データ長が決まっていないデータを総称して固定長データと呼ぶこともあり、「固定長」と聞けばデータの長さが決まっているんだぁで覚えておくと良いかもしれません。
まとめ
以上が固定長ファイルと可変長ファイルの説明でした。