2017-09-04 22 views
0

私は特定の言語に関連しない理解の質問がありますが、私はPythonで書いているので、私はpythonにタグを付けました。私はいくつかのデータを "セパレータなしの固定長フラットファイル"で提供するように求められています。私はそれが好きな理解ので、それは、私を混乱させる:固定長のフラットファイル(区切り記号なし)

Input: Column A: date (len6) 

Input: Column B: name (len20) 

Output: "20170409MYVERYSHORTNAME[space][space][space][space][space]" 

「MYVERYSHORTNAME」はわずか15文字の長さであるが、それは固定された20の長さの出力なので、私は何かを5回にそれを埋めることになってんですか?それは指定されていません。

セパレータを使用しないファイルが必要なのはなぜですか?彼/彼女は分離されたフィールドにそれを分解する必要がありますが、ポイントは何ですか?

+0

ポイントは、おそらくですサイズ固定のフィールドファイル(データベース)としてバイナリで読むことができるようにするために –

+0

いくつかのフレームワークでは、ISO8583などのこの形式が必要な場合があります。 –

答えて

1

この種のフラット(バイナリ)ファイルは、コンピュータでより高速で読みやすく、より人間にやさしい表現(例:JSON、CSVなど)で同等のメモリよりも効率的です。例えば、機械は内容を読む前に適切な量のメモリを事前に割り当てることができる。 RAMの量と動的な性質が実質的に無制限であるため、(特に必要な場合を除いて)誰もフラットファイルを使用しなくなりました。 Pythonで

は、バイナリファイルのこの種を適切に処理するために、あなたは例えば、標準ライブラリからstructモジュールを使用することができます。

例:

import struct 
from datetime import datetime 
mydate = datetime.now() 
myshortname = "HelloWorld!" 

struct.pack("8s20s", mydate.strftime('%Y%m%d').encode(), myshortname.encode()) 

>>> b'201709HelloWorld!\x00\x00\x00\x00\x00\x00\x00\x00\x00' 
+0

あなたは十分に長すぎないフィールドをスペースで埋めなければならないことを確認できますか? – dgan

+0

はい、各フィールドに入るのに十分な長さではない値を埋めなければなりません。今では、パディング側とパディングの文字はあなた次第です(それは設計上の決定です)、あなたはただ書くことと読むこととの間で一貫しなければなりません。通常、数値は0またはヌル文字で埋められ、文字列はヌル文字で埋められます(ヌル文字=すべてのビットが0の文字)。 – Guillaume

1

通常、固定長ファイルが表示されている場合、レガシーシステムを扱っています。たとえば、AS400は、通常、人工セパレータを使って固定長ファイルを吐き出します(なぜ、わかりませんが、これは私が見たものです)。

通常、文字列にはスペースが右側に埋められ、数字には0(ゼロ)が左パッドされます。

これは絶対的なものではありません。

関連する問題